Allowing
Tags With Google App Engine And Jinja2
In my web app, the user can make blog posts. When I display the blog post, newlines aren't shown because I didn't replace the new lines with tags. The problem is that I'
Solution 1:
I have another answer that I think is the best. Initially I was just displaying my variable post.content
as-is, and the newlines weren't being preserved. None of the solutions here worked (well), and my pre solution was just a quick fix and had major issues. This is the real solution:
{% for line in post.content.splitlines() %}
{{line}}<br>
{% endfor %}
Solution 2:
You can use the |safe
filter, or use the autoescape blocks:
{% autoescape false %}
{{ content goes here }}
{% autoescape %}
You could also set autoescaping in the environment to False
.
Solution 3:
In your model object, add a function like this:
classPost(db.Model):# ...defhtml_content(self):
# Escape, then convert newlines to br tags, then wrap with Markup object# so that the <br> tags don't get escaped.defescape(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>'))
Then in your template, just call that:
<p>{{ post.html_content() }}</p>
Solution 4:
You can create a jinja2 filter:
import re
from jinja2 import evalcontextfilter, Markup, escape
_paragraph_re = re.compile(r'(?:\r\n|\r|\n){2,}')
@evalcontextfilterdefnl2br(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
You need to add the filter to your jinja2 Environment before you can use it:
JINJA2_ENV.filters['nl2br'] = jinja2_filters.nl2br
In your template you can use that filter:
{{post.content|nl2br}}
Solution 5:
Here's a filter wrote by myself:
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)
returnresult
And add the filter to the jinja2.Environment()
by calling:
jinja_env.filters['nl2br'] = nl2br
Post a Comment for "Allowing
Tags With Google App Engine And Jinja2"