2016-10-19 3 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フィルタを使用してください。しかし、それはクリーンで堅牢なソリューションですか?

+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 }} 
関連する問題