17

在 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)

为什么?

4

4 回答 4

28

如果您使用的是 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

于 2014-05-09T13:55:39.197 回答
12

尝试使用 unicode() 转换值(而不是 str()):

data = unicode(value)
于 2013-07-31T16:17:02.293 回答
6

@max4ever 的答案对我有用。有时你也应该把这一行放在 python 文件的头部:

from __future__ import unicode_literals

在解决像这样的 unicode 编码问题时它会很有帮助。

于 2015-10-22T08:17:51.810 回答
4

在 settings.py 添加这个

import sys
reload(sys)
sys.setdefaultencoding('UTF8')
于 2018-07-05T16:55:28.747 回答