在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'编解码器无法对位置84中的字符u'\ u2013'进行编码:序数不在范围内(128)
错误在线data = str(value)
为什么?
答案 0 :(得分:26)
如果您正在使用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
答案 1 :(得分:10)
尝试使用unicode()转换值(而不是str()):
data = unicode(value)
答案 2 :(得分:5)
@ max4ever的回答对我有用。 有时候你应该将这一行放在python文件的头部:
from __future__ import unicode_literals
在解决像这样的unicode编码问题时会有所帮助。
答案 3 :(得分:4)
import sys
reload(sys)
sys.setdefaultencoding('UTF8')