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

how to preserve newline '\n' while using Jinja2 striptags filter?

用户post的纯文本表格,我想去除post内容中的所有HTML标签,但保留换行符\n来划分段落。

你不能,不能使用 striptags 过滤器,因为它无条件地用单个 space.

替换所有白色 space 序列

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

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

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

import re

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

(省略了白色space处理步骤)

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