Django не-ASCII символы в значениях тегов шаблонов
Я пишу пользовательский тег шаблона Django для французского приложения. Мой шаблонный тег принимает параметр, который является строкой:
{% mytag "Hello" %}
Работает отлично, но завершается неудачно при попытке ввести в значение некоторые символы, не входящие в ASCII.
Как бы вы заставить эту вещь работать:
{% mytag "Êtes-vous à Paris ?" %}
Я получил эту ошибку:
Кодек 'ascii' не может кодировать символ u'\xca' в позиции 0: порядковый номер не в диапазоне (128)
Подсказка об ошибке Юникода
Строка, которая не может быть закодирована / декодирована, была: Êtes-v
Большое спасибо заранее!
РЕДАКТИРОВАТЬ: Python версия 2.7. Вот код тега:
@register.simple_tag(takes_context=True)
def mytag(context, my_var):
return "Here it is: {my_var}".format(my_var=my_var)
1 ответ
Попробуйте заменить
return "Here it is: {my_var}".format(my_var=my_var)
от
return u"Here it is: {my_var}".format(my_var=my_var)
В Python 2.7 "Here it is: {my_var}"
это str
объект, закодированная строка, my_var
это unicode
объект, декодированная строка, при форматировании Python попытается закодировать my_var
поэтому он соответствует типу строки форматирования. Это делается с помощью ascii
кодек по умолчанию, который не поддерживает специальные символы.
Добавление u
прежде чем строка форматирования делает его unicode
строка, кодирование не будет происходить во время форматирования.
Так как похоже, что вы говорите по-французски, я советую вам прочитать эту статью, которая является отличным руководством по кодированию в Python.