Django template autoescaping
Vimtips.org is running the SVN version of Django.
This morning I ran an svn update, and I ran into my first API
change. While looking at my site later on in the day, I noticed that both of my
template filters were being HTML escaped, IE, things like < were
showing up as <.
My two filters are the pygments highlighting filter (you can see that in action
in this article) and the filter that creates the category list
at the end of every article (Under this article, it says “Filed Under:
Programming, Python, Django”).
Looking through the svn changelog, I
noticed that they implemented a new feature, called autoescape, which will make
every template variable and custom filters autoescape for safety.
Using:
{% autoescape off %}
<a href='{{ link.url }}'>{{ link.name }}</a>
{% endautoescape %}
… you can turn off autoescaping.
You can also use the Django template filter safe. As for custom filters,
to make it so your returned string isn’t autoescaped, you have to mark it as
safe. Here I’m showing my category list filter with the new
safestring.mark_safe() function:
from django.utils import safestring
@register.filter(name='category_list')
def category_list(categories):
"""
Shows all categories as a list of links separated by commas
"""
c = []
for category in categories:
c.append("<a href='/category/%d'>%s</a>" % (category.id,
category.name))
return safestring.mark_safe(", ".join(c))
Restored from VimTips archive
This article was restored from the VimTips archive. There’s probably missing images and broken links (and even some flash references), but it was still important to me to bring them back.