2017-05-25 34 views
0

我使用django-geoposition管理我的地理數據。 在我的Home.html:使用geoposition的Django標記

<!-- Add Google Maps --> 
<script> 
function myMap() { 
    {% for posts in post_list %} 
    myCenter=new google.maps.LatLng(34.8402781,135.592376); 
    var myLocation=new google.maps.LatLng({{posts.position.latitude}},{{posts.position.longitude}}); 
    var mapOptions= { 
    center:myCenter, 
    zoom:7, scrollwheel: true, draggable: true, 
    mapTypeId:google.maps.MapTypeId.HYBRID 
    }; 
    var map=new google.maps.Map(document.getElementById("googleMap"),mapOptions); 
    var marker = new google.maps.Marker({ 
    position: myLocation, 
    title:'{{ posts.title }}', 
    draggable: false, 

    }); 
    marker.setMap(map); 

    {%endfor%} 
} 
</script> 
<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyCB1CA2DoITfJoFY4HWTLTxH4Avx7QWWqA&callback=myMap"></script> 

,但它只是在地圖上顯示的拳頭後的製造商。我猜for循環不起作用。我不知道該怎麼辦。我將不勝感激任何幫助!

models.py

from django.db import models 
from geoposition.fields import GeopositionField 

class Post(models.Model): 
    title = models.CharField(max_length=100) 
    introduction = models.TextField(blank=True) 
    reason = models.TextField(blank=True) 
    transportation = models.TextField(blank=True) 
    basic_info = models.TextField(blank=True) 
    photo = models.URLField(blank=True) 
    location = models.CharField(max_length=100) 
    created_at = models.DateTimeField(auto_now_add=True) 
    position = GeopositionField(blank=True) 
    website = models.URLField(blank=True) 
    useful_link = models.URLField(blank=True) 

def __str__(self): 
return self.title 

views.py:

from django.shortcuts import render 
from django.core.paginator import Paginator, EmptyPage, PageNotAnInteger 
from .models import Post 

def home(request): 
    posts = Post.objects.all() 
    paginator = Paginator(posts, 6) #每頁顯示十個 
    page = request.GET.get('page') 
    try : 
     post_list = paginator.page(page) 
    except PageNotAnInteger : 
     post_list = paginator.page(1) 
    except EmptyPage : 
     post_list = paginator.paginator(paginator.num_pages) 
    return render(request, 'attractions/home.html', {'post_list': post_list,}) 

def post_detail(request, pk): 
    post = Post.objects.get(pk=pk) 
    return render(request, 'attractions/post.html', { 
    'post': post, 
}) 

景點\ urls.py

from django.conf.urls import url 
from . import views 
app_name = 'attractions' 
urlpatterns = [ 
    url(r'^$',views.home, name = 'home'), 
    url(r'^post/(?P<pk>\d+)/$', views.post_detail, name='post_detail') 
] 

urls.py:

from django.conf.urls import url,include 
from django.contrib import admin 

urlpatterns = [ 
    url(r'^admin/', admin.site.urls), 
    url(r'^',include('attractions.urls')), 
    url(r'^markdown/', include('django_markdown.urls')), 
] 

admin.py:

from django.contrib import admin 
from .models import Post 
from django_markdown.admin import MarkdownModelAdmin 
from django_markdown.widgets import AdminMarkdownWidget 
from django.db.models import TextField 

class PostAdmin(MarkdownModelAdmin): 
    list_display = ('title','position',) #顯示欄 
    search_fields = ('title',) #搜索欄 
    ordering = ('created_at',) #減號表示降序 
    formfield_overrides = {TextField: {'widget': AdminMarkdownWidget}} 

admin.site.register(Post,PostAdmin) 

回答

0

我看到以下錯誤:
- 使用Javascript:你必須爲整個地圖渲染JavaScript代碼執行循環的標誌不是。
我建議你使用基於類的視圖(在這種情況下ListView)。

+0

謝謝paralosreg。 因爲我是python和django的新手,我對基於類的視圖有點想法。稍後我會試着弄清楚。 我試過你的方法,但我不知道我是否按照你的建議。 我把這樣的循環: {%post_list%中的帖子} \t var myLocation = new google.maps.LatLng({{posts.position.latitude}},{{posts.position.longitude}}); \t {%endfor%} 但是,地圖仍顯示一個位置,這是post_list中的第一個位置。 您有任何進一步的建議嗎? –

+0

我認爲你的問題是在Javascript中。檢查這個職位https://stackoverflow.com/questions/3059044/google-maps-js-api-v3-simple-multiple-marker-example多個標記。你必須用「for」生成「var locations」。在視圖中一切正常。鏈接後面的 – paralosreg

+0

,我做了這樣的變化:var marker = []; (var i = 0; i <100; i ++){ \t var 012 = \t \t var latLng = new google.maps.LatLng(post [i] .latitude,post [i] .longitude); \t \t var marker = new google.maps.Marker(latLng); \t \t markers.push(marker); \t \t} \t var markerCluster = new MarkerClusterer(map,markers); 但地圖上仍然沒有顯示標記。 –