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

如何在Django的HTML模板和JS中同时使用view传递的statistics字典?

实现Django字典同时在HTML和JS中正常使用的方案

直接在视图中传入原字典,结合Django内置的json_script模板标签,就能同时满足HTML模板直接调用和JS安全解析的需求,具体步骤如下:

1. 视图层(views.py)正常传入原字典

不需要额外序列化,直接将Python字典传入模板上下文:

from django.shortcuts import render

def index(request):
    statistics = {
        'key1': '用户统计数据',
        'key2': 2024,
        'key3': [100, 200, 300],
        # 包含日期、模型对象等特殊类型也可,json_script会自动处理
    }
    return render(request, 'index.html', {'statistics': statistics})

2. HTML模板中直接调用字典

在HTML部分直接通过点语法访问字典键值:

<!-- HTML模板直接使用原字典 -->
<div class="stats-item">
    <span>统计项1:</span>{{ statistics.key1 }}
</div>
<div class="stats-item">
    <span>年份:</span>{{ statistics.key2 }}
</div>

3. JS中安全解析字典数据

使用Django的json_script模板标签,将Python字典转换为安全的JSON格式嵌入页面,再在JS中读取解析:

<!-- 用json_script生成安全的JSON数据块 -->
{{ statistics|json_script:"statistics-data" }}

<script>
    // 从DOM中读取JSON数据并解析为JS对象
    const statistics = JSON.parse(document.getElementById('statistics-data').textContent);
    
    // 正常使用JS对象
    console.log(statistics.key3); // 输出 [100, 200, 300]
    document.getElementById('chart').dataset.data = JSON.stringify(statistics.key3);
</script>

为什么这个方案可行?

  • json_script标签会自动处理Python对象到JSON的转换,包括转义特殊字符、处理Django特定类型(如日期),生成的是带有type="application/json"的script标签,不会被浏览器执行,安全性更高。
  • 原字典保持Python原生结构,HTML模板可以直接用点语法访问键值,无需额外处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.26 16:22:36