我一直在 geodjango 应用程序中工作,在空间表中包含用于搜索功能的地图,从教程中学习,到目前为止,我知道一种通过创建基于函数的视图分配 url 和在传单中加载序列化数据的方法将该 url 作为 GeoJSON.AJAX 变量导入,我一直在尝试更改该方法,然后尝试找出在我的搜索函数中传递数据的方法:
查看文件:
def map_dide(request):
return render(request, 'b_dide_uv/map_did.html')
def info_uvs(request):
uv = serialize('geojson', D_uvs.objects.all())
return HttpResponse(uv, content_type='json')
模板:
function uvs(map,options){
var dataset = new L.GeoJSON.AJAX("{% url 'info_uvs' %}",{
});
dataset.addTo(map);
}
我一直在尝试插入序列化并将其作为 map_dide 函数中的上下文传递:
def map_dide(request):
uv = serialize('geojson', D_uvs.objects.all())
return render(request, 'b_dideco_uv/mapa_did.html', {'uv':uv})
但是当我在模板的 JavaScript 中分配它时,它给了我一个错误,到目前为止我尝试过:
var uv_data = JSON.parse('{{uv|safe}}')
function uvs(map,options){
var dataset = new L.GeoJSON.AJAX(uv_data,{
});
dataset.addTo(map);
}
但是我在控制台中收到了“SyntaxError:missing ) after argument list”
我也尝试了 L.geoJson 和 L.GeoJSON 函数,但结果相同
还有哪些其他方法可以在模板中插入序列化数据?除了单独的函数之外,在搜索函数的情况下,我认为它需要位于同一函数内才能传递查询结果,但似乎 javascript 没有认识这个数据
谢谢
我通过安装 django-geojson 库解决了这个问题,改变了我在 javascript 传单代码中设置数据变量的方式:
views.py
def map_dide(request):
uv = D_uvs.objects.all()
return render(request, 'b_dideco_uv/mapa_did.html', {'uv':uv})
html
var uv_data = {{ uv|geojsonfeature|safe }};
function uvs(map,options){
new L.geoJson(uv_data).addTo(map);
}
看来我终于成功地从 geojson 中弹出了“crs”
views.py
feature:def mapa_dideco(request):
uv_ini = serialize('geojson', D_uvs.objects.all())
uv = json.loads(uv_ini)
uv.pop('crs', None)
uv = json.dumps(uv)
return render(request, 'b_dideco_uv/mapa_did.html', {'uv':uv})
其余保持不变
感谢您的回答,我终于解决了这个问题。被困在上面几个小时了。对我有用的很简单:
# views.py
def map(request):
template_name = "map.html"
homes = serialize(
format="geojson",
queryset=Home.objects.all(),
geometry_field="address_point",
fields=[],
)
context = {"homes": homes}
return render(request, template_name, context)
# map.html
<script>
<<...initialize map...>>
let homes = JSON.parse('{{ homes|safe }}')
L.geoJson(homes).addTo(map);
</script>