我看到Django的urlencode
过滤器默认不对斜杠进行编码:
https://docs.djangoproject.com/en/dev/ref/templates/builtins/?from=olddocs#urlencode
我知道我可以对斜杠进行编码,但为什么不默认呢?是不是接受了对斜杠进行编码的行为,因为它是URL中的保留字符?
答案 0 :(得分:8)
从Django源代码,urlencode
基本上是Django的urlquote
实用程序方法的包装器。根据来源中的评论,urlquote
是urllib.quote
的UTF-8安全版本。
因此urlencode
使用与python的urllib.quote
相同的默认值,urllib.quote
中找不到'/'
不会转义斜杠的原因:
使用%xx转义替换字符串中的特殊字符。快报 数字和字符“_.-”从不引用。默认情况下,这个 function用于引用URL的路径部分。该 可选的安全参数指定应该的其他字符 不被引用 - 其默认值为'/'。
所以,原因是它正在逃避路径,{{1}}是路径中完全预期且有效的字符。
答案 1 :(得分:0)
要让 urlencode
也转义 Django 模板中的 /
,请使用 {{ variable|urlencode:'' }}
。
说明:额外的可选参数告诉urlencode
“安全”的字符集,其中默认值为'/'
,因此传递一个空字符串是告诉urlencode
{{ 1}} 不安全,应该进行编码。