如何在使用Jinja2 striptags过滤器时保留换行符'\ n'?

时间:2018-01-22 12:49:06

标签: python templates flask jinja2 strip-tags

用户帖子的纯文本表单,我想删除帖子内容中的所有HTML标记,但保留换行符{{1}}来划分段落。

1 个答案:

答案 0 :(得分:1)

您不能使用striptags过滤器,因为它无条件地用一个空格替换所有空格序列。

解决方法是首先用唯一的占位符替换换行符,然后剥离标记,然后用换行符替换占位符。这有点冒险,因为输入文本可能包含占位符:

text | replace('\n', '-*- newline -*-') | striptags | replace('-*- newline -*-', '\n')

striptags实现是一个简单的正则表达式替换:

import re

_striptags_re = re.compile(r'(<!--.*?-->|<[^>]*>)')
replaced = _striptags_re.sub('', input_text)

(省略空格处理步骤)

您可以在将值传递给模板之前在Python代码中执行此操作,或者在自定义过滤器中复制它。