Django使用模板标签分割文本字段

时间:2014-07-22 22:04:09

标签: python html django python-3.x django-templates

我知道我可以使用 {{value | truncatewords:x}} 在给定数量的单词后截断文本字段。如果我想在文本之间夹入一些东西,是否可以使用截断的部分后缀?就像我要提供

一样在python中使用字符串
>>>string[:2]
>>>something in between
>>>string[2:]

但是使用模板标签,因为我正在迭代for循环并且无法通过我的视图传递它?

由于

1 个答案:

答案 0 :(得分:1)

这里需要custom template filter

以下是基于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不允许在模板过滤器中传递多个参数 - 这就是为什么它们以逗号分隔的字符串传递然后进行解析的原因。在此处详细了解该想法:How do I add multiple arguments to my custom template filter in a django template?

此外,如果字符串中只传递一个参数,length值无法转换为int等,您可能需要捕获可能的异常。