views:

936

answers:

2

Let's say that I have this string:

s = '<p>Hello!</p>'

When I pass this variable to a template, I want it to be rendered as raw html. Looking at the docs I see that I can either use the safe filter:

{{s|safe}}

or disable autoescape:

{%autoescape off}
{{s}}
{%endautoescape%}

or inside the python code declare it safe:

from django.utils.safestring import mark_safe
s = mark_safe(s)

None of these options are working for me. Whatever I do, the string is displayed as:

<p>Hello!</p>

I must be missing something, just couldn't figure out what. Is there some security setting somewhere that disallows escaping?

EDIT: Bizarre, the problem seems to be gone after I have restarted the computer.

+2  A: 

You pretty much covered it, those are indeed all the ways to disable autoescaping.

Are you sure the value you are talking about is actually s = '<p>Hello!</p>'?

My hunch is that you have additional escaping somewhere in that string...

Yuval A
I have even tried this hello string. Actually I have the same issue with all the strings I pass to the templates or send as an e-mail.
shanyu
+1 If turning off autoescape isn't working, then the string must be getting passed through something earlier on that escapes the HTML.
Carl Meyer
A: 

Look at the HTML source code, is it escaped!??? I don't think so. It should be printing letter by letter, just like this: < p > H E L L O < / >

Fernando