我知道我可以使用{{value | truncatewords:x}}在给定数目的单词之后截断文本字段。如果我想在文本之间夹一些东西,是否可以使用截短的部分后缀?就像在python中使用字符串一样
>>>string[:2]
>>>something in between
>>>string[2:]
但是使用模板标签,因为我正在遍历for循环并且无法通过我的视图传递它?
谢谢
您将需要一个自定义模板过滤器。
这是一个基于truncatewords()
过滤器实现的简单示例:
from django import template
from django.template.defaultfilters import stringfilter
from django.utils.text import Truncator
register = template.Library()
@register.filter(is_safe=True)
@stringfilter
def sandwich(value, args):
length, cutlet = args.split(',')
length = int(length)
truncated_value = Truncator(value).words(length, truncate='')
return ' '.join([truncated_value, cutlet, value[len(truncated_value):].strip()])
输出示例:
>>> from django.template import Template, Context
>>> template = Template('{% load filters %}{{ value|sandwich:"2,magic" }}')
>>> context = Context({'value': 'What a wonderful world!'})
>>> template.render(context)
u'What a magic wonderful world!'
请注意,Django不允许在模板过滤器中传递多个参数-这就是为什么将它们作为逗号分隔的字符串传递然后进行解析的原因。在此处查看有关此想法的更多信息:如何在Django模板的自定义模板过滤器中添加多个参数?
另外,如果仅在字符串中传递了一个参数,而该length
值无法转换为int
etc ,则可能需要捕获可能的异常。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句