Django strip_tags模板过滤器添加空间

时间:2016-10-19 18:57:20

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

我使用djangos模板过滤器striptags。例如:

>>> from django.utils.html import strip_tags
>>> strip_tags("<p>This is a paragraph.</p><p>This is another paragraph.</p>")
'This is a paragraph.This is another paragraph.'

在段落之间添加空格字符的最佳方法是什么,以便我得到这个字符串:

'This is a paragraph. This is another paragraph.'

编辑:

我的一个想法是编写一个自定义模板过滤器,在使用</p>过滤器之前用[space]</p>替换所有striptags标签。但这是一个干净而强大的解决方案吗?

1 个答案:

答案 0 :(得分:2)

是的,这对我来说似乎是一个干净的解决方案。在尝试为WagTail(基于Django构建)应用程序中的某些文章创建摘录时,我遇到了类似的问题。我在我的模板中使用了这种语法..

{{ page.body|striptags|truncatewords:50 }}

..并得到你描述的相同问题。这是我提出的一个实现 - 希望对其他Django / WagTail开发人员也有用。

from django import template
from django.utils.html import strip_spaces_between_tags, strip_tags
from django.utils.text import Truncator

register = template.Library()

@register.filter(name='excerpt')
def excerpt_with_ptag_spacing(value, arg):

    try:
        limit = int(arg)
    except ValueError:
        return 'Invalid literal for int().'

    # remove spaces between tags
    value = strip_spaces_between_tags(value)

    # add space before each P end tag (</p>)
    value = value.replace("</p>"," </p>")

    # strip HTML tags
    value = strip_tags(value)

    # other usage: return Truncator(value).words(length, html=True, truncate=' see more')
    return Truncator(value).words(limit)

你就像这样使用..

{{ page.body|excerpt:50 }}