The Python Oracle

Jinja 2 safe keyword

--------------------------------------------------
Hire the world's top talent on demand or became one of them at Toptal: https://topt.al/25cXVn
and get $2,000 discount on your first invoice
--------------------------------------------------

Music by Eric Matyas
https://www.soundimage.org
Track title: Beneath the City Looping

--

Chapters
00:00 Jinja 2 Safe Keyword
00:23 Accepted Answer Score 46
00:43 Answer 2 Score 40
01:05 Answer 3 Score 11
01:18 Answer 4 Score 6
01:35 Thank you

--

Full question
https://stackoverflow.com/questions/1234...

--

Content licensed under CC BY-SA
https://meta.stackexchange.com/help/lice...

--

Tags
#python #templateengine #jinja2

#avk47



ACCEPTED ANSWER

Score 46


The safe filter explicitly marks a string as "safe", i.e., it should not be automatically-escaped if auto-escaping is enabled.

The documentation on this filter is here.

See the section on manual escaping to see which characters qualify for escaping.




ANSWER 2

Score 40


Normally text is HTML-escaped (so <b> would be written out as &lt;b&gt;, which would render as <b>).

When you put |safe after something, you're telling the template engine that you have already escaped the text yourself, i.e. "it's safe to render this directly". So it will not do that encoding for you.

For more information: http://jinja.pocoo.org/docs/templates/#html-escaping




ANSWER 3

Score 11


For anyone coming here looking to use the safe filter programmatically: wrap it in a markupsafe.Markup class, on which Jinja2 depends on.




ANSWER 4

Score 6


Expanding on @data's answer, here's an example of using markupsafe.Markup:

import markupsafe
vals = {}
vals["name"] = markupsafe.Markup("<b>Duck</b>, Donald")
html = template.render(vals)

The resulting HTML will show Donald's last name in bold wherever the template contains {{name}}.