You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么script标签内会自动将&转义为&?Django模板场景问题

问题根因
  • Django模板默认开启HTML自动转义机制,所有模板变量输出时都会自动将&、"、<等特殊字符转换为对应的HTML实体,你遇到的&被转为&amp;就是Django默认转义的结果,并非浏览器层面的行为。
  • 你在非<script>标签区域看到字符串显示正常,是因为浏览器渲染普通HTML内容时,会自动把HTML实体反向解析为原始字符,你查看普通区域的页面源代码可以看到实际输出的也是&amp;,只是渲染后不可见而已。
  • <script>标签内的内容浏览器会按照JavaScript语法解析,不会做HTML实体的反向解析,因此转义后的&amp;会直接作为字符串保留,才会出现两种场景的显示差异。
解决方案

你可以通过以下方式阻止转义:

  1. 使用safe过滤器,明确告知Django该变量内容无需转义:
{{ string }}<br>
<script>
var link = "{{ string|safe }}"
</script>
  1. 使用专门适配JavaScript上下文的escapejs过滤器(更推荐,可规避XSS安全风险):
<script>
var link = "{{ string|escapejs }}"
</script>
  1. 如果整块区域都不需要转义,可使用autoescape标签关闭当前块的转义规则:
{% autoescape off %}
<script>
var link = "{{ string }}"
</script>
{% endautoescape %}

注意:如果string变量包含用户可控制的输入内容时,不要直接使用safe过滤器,避免触发XSS注入风险,优先选择escapejs做针对性转义。

内容的提问来源于stack exchange,提问作者Programming123

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:06:03