首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >django模型中的保存传单标记

django模型中的保存传单标记
EN

Stack Overflow用户
提问于 2021-12-08 21:14:48
回答 1查看 200关注 0票数 0

我想用django创建一个web应用程序,用户可以在地图上创建标记。我有这个js脚本,通过点击传单地图来添加标记。

代码语言:javascript
复制
window.onload = function () {
    element = document.getElementById('osm-map');
    var markers_list = new Array()
    var map = L.map(element);
    let rm = false
    
    L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {
        attribution: '&copy; <a href="http://osm.org/copyright">OpenStreetMap</a> contributors'
    }).addTo(map);
    // var markers = L.featureGroup([])
    var target = L.latLng('48.8686034651125', '2.34261607443957');
    map.setView(target, 5);

    map.on('click', function (e) {
        var node = document.createElement("LI")
        var marker = new L.marker(e.latlng).addTo(map);
        markers_list.push(marker);
        var marker_id = marker._leaflet_id
        let title_marker = window.prompt("give a name to your marker",marker_id);
        //todo make sure input is not empty
        while (!title_marker){
            title_marker = window.prompt("give a non empty name",marker_id);
        }
        marker.bindPopup("marker's info: "+title_marker).openPopup()
        map.addLayer(marker)
        a = document.createElement('a')
        a.innerHTML=title_marker
        a.setAttribute('id', marker_id)
        a.setAttribute('href',"javascript:void(0);");
        node.appendChild(a);
        document.getElementById("marker-list").appendChild(node)
        }
    );

    rm_btn.onclick = function () { // function to enable edit of marker
        rm = !rm
        if (rm) {
            document.getElementById('rm_btn').innerHTML = "Edition enabled";
        }
        else {
            document.getElementById('rm_btn').innerHTML = "Edition disabled";
        }
    }
    
        var ul = document.getElementById('marker-list'); //list of li marker
        ul.onclick = function(e) {
            if (rm) {
            id_to_rem = e.target.id
            for(var i=0;i<markers_list.length;i++){// iterate over layer to remove marker from map
                if (markers_list[i]._leaflet_id == id_to_rem){
                    map.removeLayer(markers_list[i])
                }
            }
            var a_list = ul.getElementsByTagName('a')
            for(var i=0;i<a_list.length;i++){// iterate over ul to remove marker from li
                if (a_list[i].id == id_to_rem){
                    ul.removeChild(ul.childNodes[i+1])
                }
            }        
        };
    }   
}

标记保存在标记列表数组中。如何在django模型中保存这些标记。我是否必须在html模板中放置一个脚本标记,然后执行django操作,还是有其他解决方案?

谢谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-12-09 11:12:01

你的问题相当广泛。因此,我将提供一个大纲,而不是为所有需要的部分(模型、视图、url、模板、js脚本)编写代码,您可以使用它进一步缩小问题的范围。

根据您的应用程序逻辑和首选项,应该使用AJAX或作为表单提交来提交数据。如果您需要在没有“页面刷新”的情况下提交数据,请使用AJAX。如果用户没有最终提交操作,那么从用户体验的角度来看,AJAX肯定会更好。

AJAX

有许多在线资源可以解释如何在Django中使用AJAX。例如,

还可以查看详细的Django 文档,介绍如何在AJAX请求中包含CSRF令牌。

您必须做出的一个决定是,您是否要用表单发送数据。如果不使用表单发送数据,请确保正确处理验证。用表单发送数据的优点是Django负责表单验证、清理等工作。

如果要使用表单,可以在html中包含隐藏字段,并在设置标记时使用JS填充这些字段。您可能需要一个动态的模板集,因为标记的数量并不固定。然后可以使用FormData来序列化表单字段,并将序列化的数据发送到Django后端,后者可以以标准的方式处理数据。

没有AJAX的

在这种情况下,您做的事情与上面相同(用标记数据填充隐藏字段),但是没有通过AJAX提交请求,而是有一个标准的submit按钮。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70281804

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档