【问题标题】:Truncate text in the middle, Django Template Tag中间截断文本,Django Template Tag
【发布时间】:2019-11-23 02:51:00
【问题描述】:

有没有一种本地方式可以在长文本中间处理truncatechars

我正在寻找的示例:

word = '123456789'

{{ word|truncatechars_middle:4 }}

显示:

12...89

【问题讨论】:

    标签: django django-templates tags


    【解决方案1】:

    据我所知,您可以通过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'
    

    【讨论】:

      猜你喜欢
      • 2016-05-05
      • 2011-07-11
      • 2014-02-05
      • 2020-03-21
      • 2016-03-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多