Django压缩器抛出字典更新序列元素#0的长度为9; 2是必需的

时间:2016-03-18 23:58:39

标签: python django django-templates django-compressor

我正在使用django-compressor 1.4并且一直在努力寻找以下错误的根本原因:

dictionary update sequence element #0 has length 9; 2 is required

包含{% compress %}标记的所有其他模板均可正常运行,并且错误仅发生在一个模板上。

模板代码为:

{%  load compress %}

{%  compress js %}
<script src='{{ STATIC_URL }}trove/js/ZeroClipboard.js' type='text/javascript' charset='utf-8'></script>
<script src='{{ STATIC_URL }}trove/js/clipboard.js' type='text/javascript' charset='utf-8'></script>
<script src='{{ STATIC_URL }}trove/js/jquery.tipsy.js' type='text/javascript' charset="utf-8"></script>
{%  endcompress %}

我通过调用:

的脚本调用compress命令
./manage.py compress

无论是通过脚本运行还是通过shell运行,结果都是相同的。

我试过查看压缩程序代码,但我不确定我在寻找什么,因为我真的不知道错误意味着什么。

我在网上看过文章,说这是django的问题,但我没有选择升级django或django-compressor。

我希望有人可以帮我解决这个问题。

谢谢, NAV

1 个答案:

答案 0 :(得分:2)

经过进一步调查后,我发现我的settings.py存在问题。

我的settings.py有:

COMPRESS_PRECOMPILERS = (
    ('text/scss', 'django_pyscss.compressor.DjangoScssFilter')
)

请注意,第一个元组后没有逗号。正确的语法如下:

COMPRESS_PRECOMPILERS = (
    ('text/scss', 'django_pyscss.compressor.DjangoScssFilter'),
)

添加逗号使错误消失,文件按预期压缩。

如果没有该逗号,Python会将外括号读为分组括号而不是元组。只有在元组中有一个项目时才会出现这种情况。为了避免这种情况,有些人更喜欢使用列表而不是元组:

COMPRESS_PRECOMPILERS = [
    ('text/scss', 'django_pyscss.compressor.DjangoScssFilter')
]

这样,COMPRESS_PRECOMPILERS总是被读作列表,Django总是可以接受。