代码之家  ›  专栏  ›  技术社区  ›  JAL

如何在Django模板中使用不带最后空格的truntewords添加省略号?

  •  5
  • JAL  · 技术社区  · 14 年前

    '一本很好的节日食谱书…'
    与所期望的
    '一本很好的节日食谱书…'

    有没有一个简单的方法让这个过滤器不在那里放一个空间?我可以在视图中很容易地处理这个问题,但是我更愿意在模板中完成它——理想情况下,不需要创建自定义过滤器。欢迎提出任何建议。

    2 回复  |  直到 14 年前
        1
  •  6
  •   dbr    12 年前

    有很多模板过滤器 Djangosnippets ,和 this one looks pretty neat

    # From http://djangosnippets.org/snippets/1259/
    
    from django import template
    
    register = template.Library()
    
    @register.filter
    def truncatesmart(value, limit=80):
        """
        Truncates a string after a given number of chars keeping whole words.
    
        Usage:
            {{ string|truncatesmart }}
            {{ string|truncatesmart:50 }}
        """
    
        try:
            limit = int(limit)
        # invalid literal for int()
        except ValueError:
            # Fail silently.
            return value
    
        # Make sure it's unicode
        value = unicode(value)
    
        # Return the string itself if length is smaller or equal to the limit
        if len(value) <= limit:
            return value
    
        # Cut the string
        value = value[:limit]
    
        # Break into words and remove the last
        words = value.split(' ')[:-1]
    
        # Join the words and return
        return ' '.join(words) + '...'
    
        2
  •  4
  •   Ben Hodes    13 年前

    这也将起作用:

    {{ value|truncatewords:3|slice:"-4" }}...
    

    基本上,只需切掉最后4个字符(椭圆加空格),然后不加空格地把它加回去!