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

如何在Django视图中传递Python数组并在HTML页面的JavaScript中正确访问?

解决Django视图传数组到前端JS的问题

我明白你遇到的困扰了——直接在JavaScript里用Django模板变量输出Python数组,很容易因为格式不兼容导致代码完全失效。让我一步步帮你搞定这个问题:

问题根源

当你在Django模板里写address={{context.lat_long.address}}时,Django会把Python列表["Main Address"]默认渲染成['Main Address'](甚至极端情况下会直接输出Main Address,完全丢失数组结构)。这种输出在JavaScript里要么存在语法隐患,要么无法被正确识别为数组类型,自然会导致addMarker函数无法正常执行。

推荐解决方案:用json_script模板标签(安全又可靠)

Django内置了json_script标签,专门用来把Python数据安全地传递给JavaScript,它会自动处理转义和格式兼容问题:

  1. 在你的HTML模板里,添加这一行(放在<body>内任意位置都可以):
{{ context.lat_long.address|json_script:"address-data" }}
  1. 在你的JavaScript代码里,通过ID获取这个JSON数据并解析成数组:
// 解析JSON数据得到标准的JS数组
const address = JSON.parse(document.getElementById('address-data').textContent);
// 调用你的addMarker函数
addMarker(address, {lat: property_lat, lng: property_long}, "red");

这个方法的优势是完全规避了XSS风险,而且不管你的数组里包含什么特殊字符(比如引号、换行符),都能被正确传递和解析。

备选方案:手动转JSON(适合简单场景)

如果你不想用json_script,也可以在视图层提前把数组转成JSON字符串,再传递给模板:

  1. 在Django视图里导入json模块,处理数组:
import json

def your_view(request):
    address = ["Main Address"]
    context = {
        'lat_long': {
            # 把Python数组转成标准JSON字符串
            'address': json.dumps(address)
        }
    }
    return render(request, 'your_template.html', context)
  1. 在模板的JavaScript里,用safe过滤器确保Django不转义JSON内容:
const address = {{ context.lat_long.address|safe }};
addMarker(address, {lat: property_lat, lng: property_long}, "red");

额外检查点

除了格式问题,你还可以确认这几点排查隐患:

  • 临时在模板里输出{{ context.lat_long.address }},确认这个变量确实存在且渲染结果符合预期
  • 检查property_lat和property_long是否是有效的数值,没有出现未定义的情况

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:49:05