Jas*_*nTS 12 python django templates escaping
在文档中它说:
唯一的例外是已经标记为"安全"的变量,无论是通过填充变量的代码,还是因为它已经应用了安全或转义过滤器.
"填充变量"部分如何工作?我实际上正在寻找一种方法来在视图中声明模板标签是安全的.我不知何故认为让设计师决定不是一个好主意.我的同事只要在"认为"这是一个好主意时就会添加它.
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs
bra*_*ers 23
Django有一个字符串的子类,称为安全字符串(特别是SafeUnicode或SafeString),可以使用它创建django.utils.safestring.mark_safe.当模板引擎遇到安全字符串时,它不会对其执行HTML转义:
>>> from django.utils.safestring import mark_safe
>>> from django.template import Template, Context
>>> Template("{{ name }}").render(Context({'name': mark_safe('<b>Brad</b>')}))
u"<b>Brad</b>"
Run Code Online (Sandbox Code Playgroud)
如果您正在编写自己的模板标记,则需要实现render()哪个将返回一个被视为安全的字符串,这意味着您必须自己处理任何必要的转义.但是,如果您正在编写模板过滤器,则可以is_safe = True在过滤器上设置属性以避免自动转义返回的值,例如
@register.filter
def myfilter(value):
return value
myfilter.is_safe = True
Run Code Online (Sandbox Code Playgroud)
有关详细信息,请参阅https://docs.djangoproject.com/en/1.3/howto/custom-template-tags/#filters-and-auto-escaping.
你可以调用django.utils.safestring.mark_safe并传递变量
...
return direct_to_template('my-template.html', {'safe_var': mark_safe('<script>alert("");</script>')})
Run Code Online (Sandbox Code Playgroud)
在模板中,它将被打印而不会转义(警报将弹出).虽然自动转义真的是一个很棒的功能,可以帮助你避免一些不好的事情.
| 归档时间: |
|
| 查看次数: |
11394 次 |
| 最近记录: |