Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

how to render django template variable as html?

What I want is like stack overflow. User can HTML format their text input, and the page should be rendered exactly in the same way,

I use the wmd.js to store the formatted input, Consider I have a context variable {{variable}} with string value "<p>something</p>". When I render the template,

{{variable}} outputs <p>something</p>

and {{variable|safe}} also output <p>something</p>

It shows the html tag as text in the page. How to render the HTML tag in the {{variable}} but not showing them as plain text.

the template

    <div id='thread_answer_content' >
        {% for answer in question.answer_set.all %}
            {{answer.answerbody|safe}}
        {% endfor %}
    </div>

the view

def detail(request,question_id):
q = get_object_or_404(Question,pk=question_id)
return render_to_response('CODE/detail.html',{'question':q},
        context_instance = RequestContext(request)
    )

here is the django admin page of the question , am using sqlite3 by the way enter image description here

like image 458
paynestrike Avatar asked Dec 25 '12 09:12

paynestrike


2 Answers

use tag : http://docs.djangoproject.com/en/dev/ref/templates/builtins/#autoescape

{% autoescape off %}{{ variable }}{% endautoescape %} 
like image 134
Pattapong J Avatar answered Oct 02 '22 22:10

Pattapong J


For simple HTML formatting, use <p>{{something}}</p>. And the Javascript way is,

<script type="text/javascript">
    var variable  =  "<p>{{something}}</p>";
    document.write(variable);
</script>

If that {{something}} itself contains the HTML tags, then {{something|safe}} itself should work unless you have {% autoescape on %}. For more filtering and formatting refer Built-in template tags and filters.

like image 36
Babu Avatar answered Oct 02 '22 23:10

Babu