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

如何将Django模型经纬度传入JS实现谷歌地图admin标记自动展示

问题原因梳理
  • views.py中不能使用Django模板语法{{ }},这是仅在模板文件中生效的语法,Python运行时会直接把object当成内置类,自然没有latitude属性
  • 静态资源(你的map.js属于static静态文件)不会被Django模板引擎解析,所以写在map.js里的{{ object.latitude }}不会被替换成实际值,直接输出成原生代码会导致JS语法报错
  • 视图中没有从数据库查询你在admin中创建的Marker数据,也没有把正确的数据传入模板上下文
修复步骤

1. 重写views.py

from django.shortcuts import render
from .models import Marker # 导入你定义的Marker模型
import json

def map(request):
    # 从数据库查询所有后台创建的Marker标记
    markers = Marker.objects.all()
    # 把标记列表转为JSON格式,方便前端JS读取
    markers_json = json.dumps(list(markers.values('latitude', 'longitude')))
    # 传入模板上下文
    context = {'markers': markers_json}
    return render(request, "map/map.html", context)

2. 修改map.html模板

不要把模板变量写在静态JS文件中,直接把地图初始化逻辑放到模板里,就能正常解析Django传入的变量:

{% load static %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>map</title>
    <script src="https://polyfill.io/v3/polyfill.min.js?features=default"></script>
    <link href="{% static 'map/css/map.css' %}" rel="stylesheet">
</head>
<body>
    <div id="map"></div>
    <!-- 在模板内定义JS逻辑,正常解析模板变量 -->
    <script>
        // safe过滤器避免Django自动转义引号导致JSON解析失败
        const allMarkers = JSON.parse('{{ markers|safe }}');
        function initMap() {
            // 没有标记时用默认经纬度作为中心
            const centerLatLng = allMarkers.length > 0 ? 
                { lat: allMarkers[0].latitude, lng: allMarkers[0].longitude } : 
                { lat: -25.363, lng: 131.044 };
            const map = new google.maps.Map(document.getElementById("map"), {
                zoom: 4,
                center: centerLatLng,
            });
            // 遍历所有后台创建的标记,全部渲染到地图上
            allMarkers.forEach(markerInfo => {
                new google.maps.Marker({
                    position: { lat: markerInfo.latitude, lng: markerInfo.longitude },
                    map: map,
                    title: "自定义标记",
                });
            })
        }
    </script>
    <script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBnDE9SrH7SfZw5lPOz9MDX1ScNz1W6ncE&callback=initMap&v=weekly&channel=2" async></script>
</body>
</html>

3. 补充说明

如果只需要展示单个标记,修改views.py的查询逻辑即可,比如取最新创建的标记Marker.objects.latest('id'),注意做判空处理避免无数据时报错。原来的静态map.js文件可以直接删除,不需要再引入。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 18:54:00