如何从Django后端添加自定义(动态)JavaScript?解决转义异常
解决Django模板中转义自定义JavaScript的问题
这问题我之前踩过坑!Django出于安全考虑,默认会自动转义模板变量里的特殊字符(比如引号、尖括号这些),所以你传的JS代码才会被转成&quot这类奇怪的实体字符,导致代码失效。给你两个靠谱的解决办法:
方法一:在模板中使用safe过滤器
直接在模板里给你的JS变量加上safe过滤器,告诉Django这段内容是安全的,不需要转义:
<script> {{ js_script|safe }} </script>
这个方法简单直接,适合只是偶尔需要关闭转义的场景。
方法二:在视图中用mark_safe标记内容
如果你希望在视图层面就处理好,避免每次在模板里加过滤器,可以用Django提供的mark_safe函数:
首先在视图文件顶部导入:
from django.utils.safestring import mark_safe
然后把你的JS代码用mark_safe包裹:
js = mark_safe("JavaScript which i want to add") js_ = {'js_script': js} return render(request, 'html.html', context=js_)
这样传到模板里的内容就会被识别为安全的,直接渲染成原始JS代码。
重要提醒
不管用哪种方法,一定要确保你传入的JS代码是完全可信的——比如是你自己编写的固定代码,而不是来自用户输入的内容。如果是用户提交的内容,直接关闭转义会有XSS攻击的风险!
内容的提问来源于stack exchange,提问作者Manav Sengupta
相关产品推荐
相关产品推荐

