Ответ 1
попробуйте использовать unicode() для преобразования значения (вместо str()):
data = unicode(value)
В Django я хочу использовать простой тег шаблона для обрезания данных.
Это то, что у меня есть до сих пор:
@register.filter(name='truncate_simple')
def truncate_char_to_space(value, arg):
"""
Truncates a string after a given length.
"""
data = str(value)
if len(value) < arg:
return data
if data.find(' ', arg, arg+5) == -1:
return data[:arg] + '...'
else:
return data[:arg] + data[arg:data.find(' ', arg)] + '...'
Но когда я его использую, я получаю следующую ошибку:
{{ item.content|truncate_simple:5 }}
Ошибка:
'ascii' кодек не может кодировать символ u '\ u2013' в позиции 84: порядковый номер не в диапазоне (128)
Ошибка при запуске строки data = str(value)
Почему?
попробуйте использовать unicode() для преобразования значения (вместо str()):
data = unicode(value)
Если вы используете django и python 2.7, это исправляет это для меня:
from django.utils.encoding import python_2_unicode_compatible
@python_2_unicode_compatible
class Utente(models.Model):
см. https://docs.djangoproject.com/en/dev/ref/utils/#django.utils.encoding.python_2_unicode_compatible
@max4ever работает для меня. также иногда вы должны поместить эту строку в начало файлов python:
from __future__ import unicode_literals
это может быть полезно при решении проблем с кодировкой unicode, таких как этот.