use*_*412 32 django django-templates django-template-filters
Django模板系统为html中的内容提供了一些选项(过滤器),但作为一个初学者,它们让我感到困惑.假设我正在按照教程制作一个简单的博客,并且博客内容需要转义 - 我相信内容,因为我是唯一一个编辑它的人.所以,问题是我应该做的像{{ post.content|autoescape }},{{ post.content|escape }}或{{ post.content|safe }}在html?
谢谢
编辑:我应该使用哪个过滤器将特殊字符自动转换为html实体?
编辑2:我刚刚意识到autoescape不是一个有效的过滤器.
Pau*_*ine 45
默认情况下,Django模板中的HTML转义处于启用状态.
Autoescape是一个标签.不是过滤器:
{% autoescape on %}
{{ post.content }}
{% endautoescape %}
Run Code Online (Sandbox Code Playgroud)
'escape'过滤器转义字符串的HTML.具体来说,它使这些替换:
<>'"&'force_escape'与'escape'几乎完全相同,除了一些极端情况.
"安全"过滤器会将您的内容标记为安全,因此不会对其进行转义(将按原样发送到浏览器).
我应该使用哪个过滤器将特殊字符自动转换为html实体?
好吧,你的意思是,就像转换Ã到Ã?坚持使用utf-8编码并忘记这些.
Blu*_*gma 22
首先,你应该逃避你的内容,因为你不需要知道(即使你是输入数据的人),如果你需要特殊的角色(比如<,>,).
您使用的语法表明您对使用转义感到不舒服:
这个
{% autoescape on %}
{{ content }}
{% endautoescape %}
Run Code Online (Sandbox Code Playgroud)
与此完全一样
{{ content|escape }}
Run Code Online (Sandbox Code Playgroud)
这个
{{ content }}
Run Code Online (Sandbox Code Playgroud)
与此< - 编辑完全相同:如果autoescape为OFF(感谢Paulo Scardine)
{{ content|safe }}
Run Code Online (Sandbox Code Playgroud)
安全是这样使用的:
{% autoescape on %}
{{ content }} <-- escape
{{ content|safe }} <-- not escape
{% endautoescape %}
Run Code Online (Sandbox Code Playgroud)
你的问题表明你对逃避是什么有点困惑.
转义是将非安全字符(如HTML标记)转换为转义版本,以便恶意内容(如脚本标记)不会破坏您的网站.Django默认在变量模板中呈现的所有内容上执行此操作.
您的评论似乎是您唯一一个编辑内容的人,您想要的是在没有自动转义的情况下渲染变量.因此,为此,您需要将其标记为安全.您可以在模板中执行此操作,方法是将整批包装在{% autoescape off %}...{% endautoescape %}标签中,也可以通过{{ myvar|safe }}过滤单个变量.或者,您可以在视图中执行此操作,方法是mark_safe(myvar)在将各个变量传递给模板之前调用它们.
| 归档时间: |
|
| 查看次数: |
43684 次 |
| 最近记录: |