如何在视图中将字符串声明为已转义或 'safe'?
How to declare a string as already escaped or 'safe' inside of the view?
我的 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 %}
但我不想让设计师决定什么是安全的,什么不是。那么如何在视图中甚至在模型中将此字符串标记为 'safe' 以防止模板转义它?
*我知道我可以在模板中使用 |linebreaksbr,但这只是目前的一个例子。我也打算在文字中嵌入图片。
应该这样做:
from django.utils.safestring import mark_safe
foo = mark_safe(foo)
根据 django 文档:
"escape(text): Returns the given text with ampersands, quotes and angle brackets encoded for use in HTML. The input is first passed through force_text() and the output has mark_safe() applied."
所以,'escaping'返回前的孔串应该就够了。
如果模型字段本身在模板中呈现时未正确显示,也许您可以尝试定义一个模型 属性 returns escape(self.body_html)
我的 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 %}
但我不想让设计师决定什么是安全的,什么不是。那么如何在视图中甚至在模型中将此字符串标记为 'safe' 以防止模板转义它?
*我知道我可以在模板中使用 |linebreaksbr,但这只是目前的一个例子。我也打算在文字中嵌入图片。
应该这样做:
from django.utils.safestring import mark_safe
foo = mark_safe(foo)
根据 django 文档:
"escape(text): Returns the given text with ampersands, quotes and angle brackets encoded for use in HTML. The input is first passed through force_text() and the output has mark_safe() applied."
所以,'escaping'返回前的孔串应该就够了。
如果模型字段本身在模板中呈现时未正确显示,也许您可以尝试定义一个模型 属性 returns escape(self.body_html)