【问题标题】:How to declare a string as already escaped or 'safe' inside of the view?如何在视图中将字符串声明为已转义或“安全”?
【发布时间】:2015-01-06 22:51:32
【问题描述】:

我的 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,但这只是一个例子。我也打算在文本中嵌入图片。

【问题讨论】:

    标签: django django-templates escaping django-1.7


    【解决方案1】:

    应该这样做:

    from django.utils.safestring import mark_safe
    
    foo = mark_safe(foo)
    

    【讨论】:

      【解决方案2】:

      根据 django 文档: “escape(text):返回给定的文本,其中包含与符号、引号和尖括号进行编码以在 HTML 中使用。输入首先通过 force_text(),输出应用了 mark_safe()。”
      因此,在返回之前“转义”孔串就足够了。
      如果模型字段 itsef 在模板中渲染时没有正确显示,也许您可​​以尝试定义一个返回 escape(self.body_html) 的模型属性

      【讨论】:

        猜你喜欢
        • 2010-11-19
        • 2018-11-12
        • 2019-11-30
        • 2010-12-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        相关资源
        最近更新 更多