Вот основной вопрос о шаблонах django и значениях Юникода.
Распространенным вариантом использования являются значения Юникода, передаваемые шаблонам django, и все же эти значения не могут быть распечатаны!
Входные значения пользователя для форм django кодируются в юникоде:
https://docs.djangoproject.com/en/dev/ref/unicode/#form-submission
Таким образом, представления обычно работают со значениями Unicode.
Когда пришло время выводить эти значения, они должны быть закодированы как utf-8.
Я хотел бы сделать эту кодировку в шаблоне django, но, похоже, для этого нет встроенного фильтра. Например: этот пост описывает создание пользовательского фильтра:
http://seewah.blogspot.com/2009/11/django-template-urlencode-unicode.html
Даже jinja2 не предоставляет встроенный фильтр такого типа.
Итак, хотя я могу передать объект в свой шаблон и получить доступ к различным структурам внутри этого объекта, это не так полезно, потому что я не могу преобразовать строки юникода в этих структурах в строки utf-8!
Я что-то здесь упускаю?
Обновление (через 1 час):
Позвольте мне привести здесь некоторый псевдокод, чтобы быть более понятным:
В шаблоне Django у меня есть что-то вроде:
{% for an_obj in list_of_obj %}
<li><a href="/my_url/?send_string={{an_obj.a_unicode_field | urlencode}}">{{an_obj.a_unicode_field}}</a></li>
{% endfor %}
Но это не удастся, если a_unicode_field является значением Unicode. Что я хочу сделать, это:
<li><a href="/my_url/?send_string={{an_obj.a_unicode_field | encode: "utf-8" | urlencode}}">{{an_obj.a_unicode_field | encode: "utf-8"}}</a></li>
Но встроенного фильтра кодирования не существует. И это очень распространенная операция: мне нужно сделать эту кодировку utf-8 для каждой строки, которую я выводю в каждом шаблоне ...