Вот возникла такая проблема. Сделал я следующее с двумя ключами как это показано тут -
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.