在我的web应用程序,用户可以进行博客文章。 当我显示了博客文章,换行没有显示,因为我并没有更换新线, <br>
标签。 问题是,我在金贾翻autoescaping,所以<br>
标签逃脱。 我不希望暂时禁用autoescaping,我想特别允许<br>
标签。 我会怎么做呢?
Answer 1:
我还有一个答案,我认为是最好的。 起初我只是展示我的变量post.content
原样,而新行没有被保存下来。 解决方案在这里没有工作(井),和我的前解决方案只是权宜之计,并有重大问题。 这才是真正的解决方案:
{% for line in post.content.splitlines() %}
{{line}}<br>
{% endfor %}
Answer 2:
您可以使用|safe
过滤器,或使用autoescape块:
{% autoescape false %}
{{ content goes here }}
{% autoescape %}
你也可以在设置autoescaping 环境给False
。
Answer 3:
在你的模型对象,增加这样的功能:
class Post(db.Model):
# ...
def html_content(self):
# Escape, then convert newlines to br tags, then wrap with Markup object
# so that the <br> tags don't get escaped.
def escape(s):
# unicode() forces the conversion to happen immediately,
# instead of at substitution time (else <br> would get escaped too)
return unicode(jinja2.escape(s))
return jinja2.Markup(escape(self.content).replace('\n', '<br>'))
然后在你的模板,只需调用:
<p>{{ post.html_content() }}</p>
Answer 4:
您可以创建一个过滤器的Jinja2:
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
您需要将过滤器添加到您的Jinja2环境之前,你可以使用它:
JINJA2_ENV.filters['nl2br'] = jinja2_filters.nl2br
在您的模板,你可以使用过滤器:
{{post.content|nl2br}}
Answer 5:
下面是我自己写了一个过滤器:
import jinja2
@jinja2.evalcontextfilter
def nl2br(eval_ctx, value):
result = jinja2.escape(value).unescape().replace('\n', '<br>')
if eval_ctx.autoescape:
result = jinja2.Markup(result)
return result
并添加过滤器到jinja2.Environment()
调用:
jinja_env.filters['nl2br'] = nl2br
Answer 6:
请注意,我都默认autoescape,所以我不要在此功能检查,但是这是我使用的是什么
def nl2br(value):
split = value.split('\n')
return jinja2.Markup('<br>').join(split)
那当然,
jinja_env.filters['nl2br'] = nl2br
Answer 7:
解决的办法是把<pre></pre>
各地在那里我有内容的区域的标记。
Answer 8:
要做到这一点最简单的方法是逃避自己的字段,然后添加换行符。 当您在神社通过它,将其标记为安全所以它不是autoescaped。
文章来源: Allowing
tags with Google App Engine and Jinja2
tags with Google App Engine and Jinja2