【问题标题】:Django: Best practice for marking model fields as safe for templatesDjango:将模型字段标记为对模板安全的最佳实践
【发布时间】:2011-06-14 11:52:43
【问题描述】:

现在我必须做一些类似(模板代码)的事情:

object.name|safe

很多时候我只是忘记添加safe 过滤器。我的问题:

  1. 这些对象是用户在表单级别提交和清理的。是否有理由让我在将它们标记为安全时更加小心?

  2. 如果上面的答案是“你很高兴”,我如何使模型字段默认安全?不用记住使用safe 标签?

【问题讨论】:

    标签: python django django-models django-templates


    【解决方案1】:

    关于#2,您可以使用一个名为mark_safe 的文档记录不佳的函数。例如,在我编写的自定义表单字段中,我需要为 label_from_instance 方法返回一个带有 HTML 代码的字符串,因此我使用 mark_safe 返回:

    return mark_safe( '<span class="foo">Some HTML output</span>' )
    

    【讨论】:

      【解决方案2】:

      safe 是一个处理 HTML 编码的模板标签,而不是对象验证。
      documentation

      只有在输出带有 HTML 数据的 TextField 时才需要使用它,例如用户使用 tinyMCE 或 CKEditor 填充的文本字段

      【讨论】:

      • 为了扩展 Dominique 所说的,安全过滤器旨在将某些内容标记为模板渲染器安全。默认情况下,Django 将转义模板上的所有输出,认为输出不安全,这意味着它可能包含您不希望浏览器将其解释为代码的 html/脚本代码。如果您确实有一个包含您希望浏览器解释的代码的字段,您可以使用安全标签告诉 Django 输出而不进行任何自动转义。
      猜你喜欢
      • 1970-01-01
      • 2016-06-14
      • 2014-07-05
      • 2015-02-26
      • 2023-03-14
      • 1970-01-01
      • 1970-01-01
      • 2011-09-08
      • 2010-12-20
      相关资源
      最近更新 更多