Django模板中如何将嵌套字典内的Python布尔值转为JS兼容格式?
解决Django模板中Python复杂对象转JavaScript兼容问题的简化方案
不用传递双版本对象,有以下几种更简便的方法:
方法1:使用Django内置的json_script模板标签(推荐)
这是Django官方推荐的安全方式,专门用于在模板中传递Python对象给JavaScript,无需在视图中提前序列化。
步骤:
- 视图层:仅传递原对象即可,无需额外处理:
context = { "fas": fas_obj, } return render(request, "project_structure.html", context)
- 模板HTML部分:添加
json_script标签(不要放在<script>标签内部):
{{ fas|json_script:"fas-data" }}
- JavaScript部分:通过DOM获取序列化内容并解析:
const pp = JSON.parse(document.getElementById('fas-data').textContent);
该方法会自动处理Python布尔值(True→true,False→false)、字符串转义等问题,同时避免XSS风险,比手动序列化更安全可靠。
方法2:自定义模板过滤器实现序列化
如果需要更灵活的控制逻辑,可以自定义模板过滤器,直接在模板中完成Python对象到JS兼容JSON的转换。
步骤:
- 在你的Django应用下创建
templatetags目录(无则新建),并添加__init__.py和custom_filters.py文件:
# templatetags/custom_filters.py import json from django import template from django.core.serializers.json import DjangoJSONEncoder register = template.Library() @register.filter(name='to_js_json') def to_js_json(obj): return json.dumps(obj, cls=DjangoJSONEncoder)
- 模板层:先加载自定义过滤器,再在JS中使用:
{% load custom_filters %} <script> const pp = {{ fas|to_js_json|safe }}; </script>
- 视图层:依然只需传递原对象
fas_obj。
注意:使用|safe时要确保fas_obj内容可信,避免XSS攻击。
内容的提问来源于stack exchange,提问作者Kim Stacks
相关产品推荐
相关产品推荐

