我想要的是堆栈溢出。用户可以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
答案 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 %}