【问题标题】:Django strip_tags template filter add spaceDjango strip_tags 模板过滤器添加空间
【发布时间】:2017-03-01 13:40:28
【问题描述】:

我使用 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.'

编辑:

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

【问题讨论】:

  • 可以在模板里加个空格或者输入吗?喜欢"...&lt;/p&gt;\n&lt;p&gt;..."

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


【解决方案1】:

是的,这对我来说似乎是一个干净的解决方案。在尝试为 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 }}

【讨论】:

    猜你喜欢
    • 2020-06-19
    • 2012-06-03
    • 1970-01-01
    • 2011-01-07
    • 2011-04-12
    • 2012-08-18
    • 1970-01-01
    • 1970-01-01
    • 2019-01-01
    相关资源
    最近更新 更多