/ map中的AttributeError在Django中创建folium地图

时间:2019-07-16 01:56:31

标签: python django folium

我正在从postgressql数据库中读取gps坐标,并且正在使用叶片来创建地图。我使用iframe将地图嵌入index.html中。正在读取数据并在index.html中显示数据,但是嵌入式map.html引发错误,指出“ QuerySet”对象没有属性“ Lat”-但是我的记录集确实有一个名为Lat的字段,我在索引中使用了该字段.html

我正在index.html中显示数据(纬度,经度,在这些坐标处拍摄的照片)。我创建了一个模型,并在postgressql数据库中存储了数据。我在views.py中创建了一个函数,在该函数中循环浏览数据集以在叶映射中创建标记。然后,我使用iframe将其嵌入index.html

views.py

from django.shortcuts import render
from django.http import HttpResponse
from .models import PhotoInfo
import folium

# Create your views here.
def index(request):
    VarPhotoInfo = PhotoInfo.objects.order_by('DateTaken')

    context = {'PhotoInfo': VarPhotoInfo }

    return render(request,'natureapp/index.html',context)

def show_map(request):
    #creation of map comes here + business logic
    PhotoInfo1 = PhotoInfo.objects.order_by('DateTaken')
    m = folium.Map([33.571345, -117.763265], zoom_start=10)
    test = folium.Html('<b>Hello world</b>', script=True)
    popup = folium.Popup(test, max_width=2650)
    folium.RegularPolygonMarker(location=[33.571345, -117.763265], popup=popup).add_to(m)
    fg = folium.FeatureGroup(name = "MyMap")
    for lt, ln, el, fn  in zip(PhotoInfo1.Lat,PhotoInfo1.Lon, PhotoInfo1.DateTaken, PhotoInfo1.PhotoName):
        fg.add_child(folium.Marker(location={float(lt),float(ln)},popup = str(el) +' file: '+fn, icon = folium.Icon(color='green')))

    m.add_child(fg)
    str = m.get_root().render()
    context = {'MyMap': str}

    return render(request, 'natureapp/map.html', context)

map.html:
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>NatureMapper</title>
      </head>
<h1>Map goes here </h1>
{{ my_map  }}
</html>

index.html:

<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8">
    <title>NatureMapper</title>
      </head>
<h1>Here it is! </h1>
 {% if PhotoInfo %}

  {% for Photo in PhotoInfo %}

 <p>there is info.</p>
   <p> {{ Photo.PhotoName }}</p>
   <p> {{ Photo.Lat }}</p>
   <p> {{ Photo.Long }}</p>
   <p>  <img src="{{ Photo.PhotoImage.url }}" width = "240" alt=""></p>


  {% endfor %}

 {% else %}

 <p>there is no info.</p>
 {% endif %}

 <iframe id="encoder_iframe" height=95% width="70%" src="{% url 'show_map' %}">
     </iframe>

</html>

Index.html显示所有数据,包括图片。 show_map出现以下错误消息:

  / p'QuerySet'对象上的

AttributeError没有属性'Lat'   请求方法:GET请求URL:http://127.0.0.1:8000/map Django   版本:2.2异常类型:AttributeError异常值:   'QuerySet'对象没有属性'Lat'异常   位置:C:\ Users \ denjs \ Documents \ DjangoProjects \ NatureMapper2 \ naturemapper2 \ natureapp \ views.py   在show_map中,第22行Python   可执行文件:C:\ Users \ denjs \ AppData \ Local \ conda \ conda \ envs \ mydjangoenv \ python.exe   Python版本:3.7.2 Python路径:
  ['C:\ Users \ denjs \ Documents \ DjangoProjects \ NatureMapper2 \ naturemapper2',   'C:\ Users \ denjs \ AppData \ Local \ conda \ conda \ envs \ mydjangoenv \ python37.zip',   'C:\ Users \ denjs \ AppData \ Local \ conda \ conda \ envs \ mydjangoenv \ DLLs',   'C:\ Users \ denjs \ AppData \ Local \ conda \ conda \ envs \ mydjangoenv \ lib',   'C:\ Users \ denjs \ AppData \ Local \ conda \ conda \ envs \ mydjangoenv',   'C:\ Users \ denjs \ AppData \ Local \ conda \ conda \ envs \ mydjangoenv \ lib \ site-packages',   'C:\ Users \ denjs \ AppData \ Local \ conda \ conda \ envs \ mydjangoenv \ lib \ site-packages \ win32',   'C:\ Users \ denjs \ AppData \ Local \ conda \ conda \ envs \ mydjangoenv \ lib \ site-packages \ win32 \ lib',   'C:\ Users \ denjs \ AppData \ Local \ conda \ conda \ envs \ mydjangoenv \ lib \ site-packages \ Pythonwin']]   服务器时间:2019年7月16日,星期二01:40:33 +0000

1 个答案:

答案 0 :(得分:0)

queryset是对象列表。查询集没有附加Lat属性。

index.html中,您遍历具有PhotoInfo属性的Lat个对象的查询集。

{% for Photo in PhotoInfo %}
   <p> {{ Photo.Lat }}</p>
{% endif %}

def show_map(request)视图中,您不是在查询集上进行迭代,而是尝试访问查询集上的Lat属性。

PhotoInfo1 = PhotoInfo.objects.order_by('DateTaken')
# PhotoInfo1 is not a single object, but rather a list of objects

更改def show_map(request)中的查询集以仅返回一个实例:

PhotoInfo1 = PhotoInfo.objects.get(id=1)

或者像在模板中那样遍历PhotoInfo1查询集。