2016-03-18 2 views
2

Я использую Джанго-компрессор 1.4 и боролся в течение многих часов на поиск первопричины для следующей ошибки:Элемент последовательности обновления словаря компрессора Django для компрессора # 0 имеет длину 9; 2 требуется

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 %} 

Я призываю команду компресс через скрипт, который вызывает:

./manage.py compress 

Результаты одинаковы независимо, если я запускаю его через скрипт или пробегая оболочка.

Я пробовал просмотреть код компрессора, но я не совсем уверен, что я ищу, поскольку я действительно не знаю, что означает ошибка.

Я читал статьи в Интернете, которые говорят, что это проблема с django, но у меня нет возможности обновить django или django-compressor.

Я надеюсь, что кто-то может помочь мне исправить эту проблему.

Спасибо, нав

+0

Какая у вас версия Django? – Selcuk

+0

@Selcuk моя версия 1.6. – navanitachora

+0

Известная ошибка с версиями Django до 1.9.x. Если вы не можете обновить, попробуйте найти обходной путь. См. [Этот вопрос] (https://github.com/django-compressor/django-compressor/issues/706) – Selcuk

ответ

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.

+0

Это работает и для меня! Очень странная ошибка ... – modulitos