Шаблоны Django: преобразование Unicode в UTF-8 - очень распространенная операция, которая не является встроенной - PullRequest
0 голосов
/ 21 января 2012

Вот основной вопрос о шаблонах 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 для каждой строки, которую я выводю в каждом шаблоне ...

Ответы [ 2 ]

2 голосов
/ 17 января 2013

Если вы видите:

[u'keyword '], например, напишите в шаблон: {{test.info}}

, вы можете использовать: {{test.info.0}} для визуализации: ключевое слово.

Это то, что вам нужно?

С уважением, Массимо

1 голос
/ 21 января 2012

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

Ничего особенного не нужно делать, чтобы кодировать как utf-8.Это по умолчанию.Если вы видите что-то другое, вы где-то что-то неправильно настроили.

Редактировать после обновления Нет, проблема все еще не решена.Первый пример просто работает.Нет необходимости специально кодировать в utf-8.Как это "проваливается" для вас, когда это Unicode?(И что вы подразумеваете под «когда это значение в юникоде»? Все значения, передаваемые из Django в шаблон, являются юникодом.)

...