我想用django创建一个web应用程序,用户可以在地图上创建标记。我有这个js脚本,通过点击传单地图来添加标记。
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: '© <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操作,还是有其他解决方案?
谢谢
发布于 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按钮。
https://stackoverflow.com/questions/70281804
复制相似问题