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.

Другие вопросы по тегам