2016-10-19 4 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.' 

편집 : 내가 가지고있는

하나의 아이디어가있다 태그를 [space]</p>으로 바꾸는 사용자 지정 템플릿 필터를 작성한 후에 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 }}