如何将django模板变量渲染为html?

时间:2012-12-25 09:13:56

标签: django string django-templates render html

我想要的是堆栈溢出。用户可以HTML格式化他们的文本输入,并且页面应该以完全相同的方式呈现,

我使用wmd.js存储格式化的输入,考虑我有一个字符串值{{variable}}的上下文变量"<p>something</p>"。当我渲染模板时,

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

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

它将html标记显示为页面中的文本。如何在{{variable}}中呈现HTML标记,但不将其显示为纯文本。

模板

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

视图

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)
    )

这是问题的django管理页面,顺便使用sqlite3 enter image description here

4 个答案:

答案 0 :(得分:20)

使用代码:http://docs.djangoproject.com/en/dev/ref/templates/builtins/#autoescape

{% autoescape off %}{{ variable }}{% endautoescape %} 

答案 1 :(得分:2)

您可能希望使用escape来呈现它,而不是safe

{{ variable|escape }}

答案 2 :(得分:1)

对于简单的HTML格式,请使用<p>{{something}}</p>。而Javascript方式是,

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

如果{{something}}本身包含HTML标记,则{{something|safe}}本身应该有效,除非您有{% autoescape on %}。有关更多过滤和格式设置,请参阅Built-in template tags and filters

答案 3 :(得分:0)

我认为另一种方法是使用firstof tag

  

请注意,firstof标记中包含的变量不会被转义。这是因为模板标签不会转义其内容。打印变量中包含的任何HTML或Javascript代码都将按原样呈现,这可能会导致安全问题。如果需要转义firstof标记中的变量,则必须明确地执行此操作

{% firstof variable %}