Найти - Пользователи
Полная версия: Тег cache и потусторонние силы
Начало » Django » Тег cache и потусторонние силы
1
qewerty
Вот возникла такая проблема. Сделал я следующее с двумя ключами как это показано тут - http://www.djangoproject.com/documentation/cache/#template-fragment-caching

{% cache 100000 blah_blah request.user.id %}
...
{% endcache %}
И оно дало это,

UnicodeDecodeError at /blah_blah/
'ascii' codec can't decode byte 0xd0 in position 444: ordinal not in range(128)
Что сначало ввело мня в недоумение и заставило некоторое время копать не в том направлении. А оказалось-то просто переменная request не существовала в шаблоне, зато была просто user и вот это уже работало нормально.

{% cache 100000 blah_blah user.id %}
...
{% endcache %}
Очевидно, что облом наступал в вызове resolve_variable(var, context) в файле …/django/templatetags/cache.py, где var есть “request.user.id”, которой нет в контексте. Но почему возникала UnicodeDecodeError, а не VariableDoesNotExist, всё ещё оставалось загадкой.

Оказалось, проблема в самом классе VariableDoesNotExist, который лежит тут /home/qewerty/src/from-repo/django/trunk/django/template/__init__.py, а именно в его методе __str__

def __str__(self):
return self.msg % self.params
Т.е. генерится VariableDoesNotExist, который потом сам выплёвывает UnicodeDecodeError и вносит в процесс отладки страшную путаницу.
Я так понимаю, что как бы оно ни было проблемы с юникодом не должны были дойти до этого места.

Как думаете, что с этим можно сделать? Сёдняшний trunk.
slivlen
Обновил django до текущей версии и попытался воспроизвести твой пример, в результате получил VariableDoesNotExist.
qewerty
slivlen
Обновил django до текущей версии и попытался воспроизвести твой пример, в результате получил VariableDoesNotExist.
Ну значит что-то не так в моей инсталяции и настройках.
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB