2011-01-24 46 views
3

现在我不得不这样做(模板代码)最佳实践:Django的:标志模型领域安全的模板

object.name|safe 

有很多次,我只是单纯地忘记添加safe过滤器。我的问题:

  1. 这些对象是用户在表单级别提交和清理的。为什么我应该更加小心地标记它们是否安全?

  2. 如果上面的答案是“你很好去”,那么默认情况下如何使模型字段安全?无需记住使用safe标签?

回答

0

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

您只需如果你用HTML数据输出文本字段内,例如该hyour用户与TinyMCE的或CKEditor的

+1

要扩展什么多米尼克说,安全过滤器是指标记模板渲染器的安全信息。默认情况下,Django会将模板上的所有输出转义为输出不安全,这意味着它可能包含不希望浏览器解释为代码的html/script代码。如果你确实有一个代码需要浏览器解释的字段,你可以使用安全标签来告诉Django在没有任何自动转义的情况下输出。 – 2011-01-24 15:10:32

4

填写关于#2的文本字段使用它,有一个称为mark_safe的文档记录功能很差,您可以使用它。例如,在我写了一个自定义表单字段我需要返回与该label_from_instance方法HTML代码的字符串,所以我回用mark_safe:

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