【发布时间】:2019-11-23 02:51:00
【问题描述】:
有没有一种本地方式可以在长文本中间处理truncatechars?
我正在寻找的示例:
word = '123456789'
{{ word|truncatechars_middle:4 }}
显示:
12...89
【问题讨论】:
标签: django django-templates tags
有没有一种本地方式可以在长文本中间处理truncatechars?
我正在寻找的示例:
word = '123456789'
{{ word|truncatechars_middle:4 }}
显示:
12...89
【问题讨论】:
标签: django django-templates tags
据我所知,您可以通过writing custom template filters [Django-doc] 自己定义一个。
在您的应用中,您可能需要添加粗体元素:
app/
__init__.py
templatetags/
__init__.py
text_utils.py
__init__.py 文件可能只是空的。在text_utils.py文件中,可以写:
# app/templatetags/text_utils.py
from django.template import Library
from django.template.defaultfilters import stringfilter
register = Library()
@register.filter(is_safe=True)
@stringfilter
def truncatechars_middle(value, arg):
try:
ln = int(arg)
except ValueError:
return value
if len(value) <= ln:
return value
else:
return '{}...{}'.format(value[:ln//2], value[-((ln+1)//2):])
在模板中,您可以使用模板过滤器:
{% load text_utils %}
{{ word|truncatechars_middle:4 }}
如果字符数为奇数,则在末尾多加一个,如:
>>> truncatechars_middle(word, 4)
'12...89'
>>> truncatechars_middle(word, 5)
'12...789'
>>> truncatechars_middle(word, 6)
'123...789'
>>> truncatechars_middle(word, 7)
'123...6789'
>>> truncatechars_middle(word, 8)
'1234...6789'
>>> truncatechars_middle(word, 9)
'123456789'
【讨论】: