如何将视图中的字符串声明为已转义或“安全”?

时间:2015-01-06 22:51:33

标签: django django-templates escaping django-1.7

我的Django模型有两个文本字段:

body = models.TextField()
body_html = models.TextField()

第二个填充如下:

 def save(self, force_insert=False, force_update=False, using=None, update_fields=None):
    self.body_html = "<br />".join(escape(self.body).split("\n"))
    return models.Model.save(self, force_insert=force_insert, force_update=force_update, using=using, update_fields=update_fields)

不,如果我在模板中使用body_html,我仍然需要:

{% autoescape off %}
    {{ foo.body_html }}
{% endautoescape %}

但我不想让设计师决定什么是安全的,什么不是。那么如何在视图内部甚至在模型内部将此字符串标记为“安全”以防止模板转义?

*我知道我可以在模板中使用| linebreaksbr,但这只是一个例子。我打算在图片中嵌入图片。

2 个答案:

答案 0 :(得分:3)

应该这样做:

from django.utils.safestring import mark_safe

foo = mark_safe(foo)

答案 1 :(得分:0)

根据django docs: &#34; escape(text):返回给定的文本,其中的&符号,引号和尖括号编码用于HTML。输入首先通过force_text()传递,输出应用了mark_safe()。&#34;
所以,&#39;逃避&#39;返回之前的孔串应该足够了 如果模型字段itsef在模板中呈现时未正确显示,则可能尝试定义返回escape的模型属性(self.body_html)