python - 如何正确应用 django/jinja2 模板过滤器 'escape' 和 'linebreaks'?

标签 python html django django-templates jinja2

我目前正在尝试使用 Django 模板过滤器转义变量,如下所示。 我使用 jinja2 模板引擎而不是 django 的主要模板引擎

{{ my_variable|escape|linebreaks }}

带换行符的字符串输出如下:

Lorem ipsum <br /> dolor sit amet <br />rg srg
gs rgsr rsg serg<br />r srg

理想情况下

<br />

不应被转义,因为它是由“换行符”过滤器添加的。没有带有原始字符串的 html 标签。

我试过:

{{ my_variable|linebreaks|escape }}

但是,结果更糟:

<p>Lorem ipsum <br /> dolor sit amet <br />rg srg</p>
<p>gs rgsr rsg serg<br />r srg</p>

有谁知道我在应用模板过滤器时是否做错了什么,和/或是否能为我指明正确的方向?

谢谢。

最佳答案

所以您在 jinja2 模板中使用了 django 的 linebreaks 过滤器?在那种情况下,我会假设 django 标记字符串安全的方式可能与 jinja2 不兼容,因此转义 django 添加的标签(如果自动转义处于事件状态)。

如果将 jinja2 的 safe 过滤器添加到末尾会怎么样?

{{ my_variable|escape|linebreaks|safe }}

另外,jinja2文档中有个自定义过滤器的例子,貌似和django的换行符很像。 http://jinja.pocoo.org/docs/api/#custom-filters

import re
from jinja2 import evalcontextfilter, Markup, escape

_paragraph_re = re.compile(r'(?:\r\n|\r|\n){2,}')

@evalcontextfilter
def nl2br(eval_ctx, value):
    result = u'\n\n'.join(u'<p>%s</p>' % p.replace('\n', '<br>\n')
                      for p in _paragraph_re.split(escape(value)))
    if eval_ctx.autoescape:
        result = Markup(result)
    return result

关于python - 如何正确应用 django/jinja2 模板过滤器 'escape' 和 'linebreaks'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4901483/

相关文章:

python - Django 数据库未迁移

javascript - 通过javascript使photoshop运行系统命令

python - 合并数组并根据python中的键添加

python /Django : How to detect and avoid import name conflict?

javascript - 根据选择选项修改元素

javascript - 当获取靠近文档边框的选定文本的边界矩形时,ie/edge 会出现奇怪的结果

Django:集成 Avangate IPN

python - 为什么 Python 中不使用 double ?

python - 如何在python中使用pyarrow连接到hdfs

html - 在某个点预加载 CSS 图像