首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何正确应用django/jinja2模板过滤器“换行”和“换行”?

如何正确应用django/jinja2模板过滤器“换行”和“换行”?
EN

Stack Overflow用户
提问于 2011-02-05 02:18:52
回答 2查看 4.9K关注 0票数 4

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

代码语言:javascript
运行
复制
{{ my_variable|escape|linebreaks }}

包含换行符的字符串的输出如下:

代码语言:javascript
运行
复制
Lorem ipsum <br /> dolor sit amet <br />rg srg
gs rgsr rsg serg<br />r srg

理想情况下,

代码语言:javascript
运行
复制
<br />

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

我试过了:

代码语言:javascript
运行
复制
{{ my_variable|linebreaks|escape }}

但事实证明更糟的是:

代码语言:javascript
运行
复制
<p>Lorem ipsum <br /> dolor sit amet <br />rg srg</p>
<p>gs rgsr rsg serg<br />r srg</p>

有没有人知道我是否在应用模板过滤器时做错了什么,并且/或者能够为我指出正确的方向?

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-02-05 12:15:18

愚蠢的我,看起来我可以使用:

代码语言:javascript
运行
复制
{{ my_variable|forceescape|linebreaks }}

强制首先应用“转义”过滤器。默认情况下,“转义”只适用于所有其他过滤器的末尾,而不管位置如何,所以force_escape是另一个最简单的替代方案。

票数 2
EN

Stack Overflow用户

发布于 2011-02-05 02:51:51

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

如果您将安全过滤器从jinja2添加到末尾会怎样?

代码语言:javascript
运行
复制
{{ my_variable|escape|linebreaks|safe }}

另外,在jinja2文档中有一个自定义过滤器的示例,它看起来类似于django的换行符。http://jinja.pocoo.org/docs/api/#custom-filters

代码语言:javascript
运行
复制
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
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4901483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档