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

Django模板中如何将嵌套字典内的Python布尔值转为JS兼容格式?

解决Django模板中Python复杂对象转JavaScript兼容问题的简化方案

不用传递双版本对象,有以下几种更简便的方法:

方法1:使用Django内置的json_script模板标签(推荐)

这是Django官方推荐的安全方式,专门用于在模板中传递Python对象给JavaScript,无需在视图中提前序列化。

步骤:

  1. 视图层:仅传递原对象即可,无需额外处理:
context = {
    "fas": fas_obj,
}
return render(request, "project_structure.html", context)
  1. 模板HTML部分:添加json_script标签(不要放在<script>标签内部):
{{ fas|json_script:"fas-data" }}
  1. JavaScript部分:通过DOM获取序列化内容并解析:
const pp = JSON.parse(document.getElementById('fas-data').textContent);

该方法会自动处理Python布尔值(True→true,False→false)、字符串转义等问题,同时避免XSS风险,比手动序列化更安全可靠。

方法2:自定义模板过滤器实现序列化

如果需要更灵活的控制逻辑,可以自定义模板过滤器,直接在模板中完成Python对象到JS兼容JSON的转换。

步骤:

  1. 在你的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)
  1. 模板层:先加载自定义过滤器,再在JS中使用:
{% load custom_filters %}

<script>
const pp = {{ fas|to_js_json|safe }};
</script>
  1. 视图层:依然只需传递原对象fas_obj。

注意:使用|safe时要确保fas_obj内容可信,避免XSS攻击。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 08:10:32