VKe*_*Ken 4 html python django django-templates jinja2
我目前正在尝试使用 django 模板过滤器来转义变量,如下所示。我使用 jinja2 模板引擎而不是 django 的主要模板引擎
{{ my_variable|escape|linebreaks }}
Run Code Online (Sandbox Code Playgroud)
带有换行符的字符串的输出如下:
Lorem ipsum <br /> dolor sit amet <br />rg srg
gs rgsr rsg serg<br />r srg
Run Code Online (Sandbox Code Playgroud)
理想情况下
<br />
Run Code Online (Sandbox Code Playgroud)
不应该被转义,因为它是由“换行符”过滤器添加的。没有带有原始字符串的 html 标签。
我试过了:
{{ my_variable|linebreaks|escape }}
Run Code Online (Sandbox Code Playgroud)
但是,事实证明更糟:
<p>Lorem ipsum <br /> dolor sit amet <br />rg srg</p>
<p>gs rgsr rsg serg<br />r srg</p>
Run Code Online (Sandbox Code Playgroud)
有谁知道我在应用模板过滤器时是否做错了什么,和/或能够指出我正确的方向?
谢谢。
所以你linebreaks在jinja2模板中使用django的过滤器?在这种情况下,我会假设 django 标记字符串安全的方式可能与 jinja2 不兼容,因此转义了 django 添加的标签(如果 autoescape 处于活动状态)。
如果您将 jinja2 的安全过滤器添加到最后会怎样?
{{ my_variable|escape|linebreaks|safe }}
Run Code Online (Sandbox Code Playgroud)
否则,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
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4756 次 |
| 最近记录: |