如何通过 id 呈现 django 位置字段?
how to render django location field by id?
我在 django 中有一个这样的模型:
...
class Post (models.Model)
title = models.CharField(max_length=120)
location = models.PointField(srid=4326, null=True, blank=True)
objects = GeoManager()
def __unicode__(self):
return self.title
def get_absoulute_url(self):
return reverse("post_map", kwargs={
'id':self.id
})
...
我想像这样按 id 渲染位置:
...
path('post-map/<id>/post_map/',post_map,name='post_map')
path('post-map/<id>/post_page/',post_page,name='post_map')
path('post-map/<id>/home_page/',home_page,name='post_map')
...
一个view.py:
...
def post_map(request,id):
#i can render Post.objects.all() but i cant render this:
name = serialize('geojson',get_objects_or_404(Post, id=id)
return HttpResponse(name,content_type='json')
def home_page(request):
return render(request,'home_page.html')
def post_page(request,id):
post = get_object_or_404(Post, id=id)
context = {
'post':post,
}
return render(request,'post-pagepltest.html',context)
...
这是 post_page.html
中的一部分代码
<div class="w-100 map border ">
<i class="fas fa-map-marker-alt float-right"></i>
<a href="{{ post.get_absolute_url }}home_page">
<span class="badge badge-pill float-left mr-auto badge-danger "> map-
location </span>
</a>
</div>
和home_page.html是:
...
<!DOCTYPE html>
<html>
{% load static %}
{% load leaflet_tags %}
<head>
{% leaflet_js %}
{% leaflet_css %}
<title> home </title>
<style type="text/css">
#gis {width:80%; height:700px;}
</style>
<script type ="text/javascript" src="{% static 'js2/leaflet.ajax.js' %}" ></script>
</head>
<body>
<h3>we are heroes!!<h3>
<br>
<script type="text/javascript">
function our_layers(map,options){
var datasets = new L.GeoJSON.AJAX("{% url 'post_map' %}",{
});
datasets.addTo(map);
}
</script>
{% leaflet_map "gis" callback="window.our_layers" %}
</body>
</html>
但是我不能通过id渲染它,有什么办法可以解决这个问题吗?
我可以保存数据,也可以渲染所有位置以查看地图功能
名称=序列化('geojson',get_objects_or_404(Post,id=id)
但我无法通过每个 post 的每个 id 呈现
我怎样才能通过 id 渲染 post 来显示这样的特定位置?
name = serialize('geojson',get_objects_or_404(Post,id=id)
您的 url 需要 id 参数,所以您应该这样做;
{% url 'post_map' id=1 %}
你可以用它来通过id获取。
此外,您的视图应将上下文传递给呈现的模板:
from django.shortcuts import render
def map (request,id):
name = serialize('geojson',get_objects_or_404(Post, id=id)
# you can call {{name}}
return render(request, "home_page.html", {'name':name})
我在 django 中有一个这样的模型:
...
class Post (models.Model)
title = models.CharField(max_length=120)
location = models.PointField(srid=4326, null=True, blank=True)
objects = GeoManager()
def __unicode__(self):
return self.title
def get_absoulute_url(self):
return reverse("post_map", kwargs={
'id':self.id
})
...
我想像这样按 id 渲染位置:
...
path('post-map/<id>/post_map/',post_map,name='post_map')
path('post-map/<id>/post_page/',post_page,name='post_map')
path('post-map/<id>/home_page/',home_page,name='post_map')
...
一个view.py:
...
def post_map(request,id):
#i can render Post.objects.all() but i cant render this:
name = serialize('geojson',get_objects_or_404(Post, id=id)
return HttpResponse(name,content_type='json')
def home_page(request):
return render(request,'home_page.html')
def post_page(request,id):
post = get_object_or_404(Post, id=id)
context = {
'post':post,
}
return render(request,'post-pagepltest.html',context)
...
这是 post_page.html
中的一部分代码<div class="w-100 map border ">
<i class="fas fa-map-marker-alt float-right"></i>
<a href="{{ post.get_absolute_url }}home_page">
<span class="badge badge-pill float-left mr-auto badge-danger "> map-
location </span>
</a>
</div>
和home_page.html是:
...
<!DOCTYPE html>
<html>
{% load static %}
{% load leaflet_tags %}
<head>
{% leaflet_js %}
{% leaflet_css %}
<title> home </title>
<style type="text/css">
#gis {width:80%; height:700px;}
</style>
<script type ="text/javascript" src="{% static 'js2/leaflet.ajax.js' %}" ></script>
</head>
<body>
<h3>we are heroes!!<h3>
<br>
<script type="text/javascript">
function our_layers(map,options){
var datasets = new L.GeoJSON.AJAX("{% url 'post_map' %}",{
});
datasets.addTo(map);
}
</script>
{% leaflet_map "gis" callback="window.our_layers" %}
</body>
</html>
但是我不能通过id渲染它,有什么办法可以解决这个问题吗? 我可以保存数据,也可以渲染所有位置以查看地图功能 名称=序列化('geojson',get_objects_or_404(Post,id=id) 但我无法通过每个 post 的每个 id 呈现 我怎样才能通过 id 渲染 post 来显示这样的特定位置?
name = serialize('geojson',get_objects_or_404(Post,id=id)
您的 url 需要 id 参数,所以您应该这样做;
{% url 'post_map' id=1 %}
你可以用它来通过id获取。
此外,您的视图应将上下文传递给呈现的模板:
from django.shortcuts import render
def map (request,id):
name = serialize('geojson',get_objects_or_404(Post, id=id)
# you can call {{name}}
return render(request, "home_page.html", {'name':name})