2016-10-19 34 views
1

我使用djangos模板过滤器striptags。例如:Django strip_tags模板过滤器添加空间

>>> 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过滤器之前,将所有</p>标签替换为[space]</p>。但是,这是一个干净而强大的解决方案?

+0

你能添加一个空格或在模板中输入?像'“...

\ n

...” –

回答

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 }}