1

我正在将 Django 模型中的数据序列化为 json,并将该信息放在 Google 地图的信息窗口中。到目前为止它工作正常。但我还想包含一个指向每个实际对象的链接,以便用户可以单击一个将他们带到完整报告的 url。我不确定如何使用 json 来完成此操作,因为我仍在处理它。

本质上使用 json 在 Google Map infowindow 中提供指向实际对象的链接,在这种情况下是“故事”模型。我希望实际故事的链接出现在 Google Map info 窗口中。

这是我的看法:

def all_stories(request):
    if not request.user.is_authenticated():
        return redirect("django.contrib.auth.views.login")
    all_stories = Story.objects.select_related().order_by('-date')
    storyJson = []
    for story in all_stories:
        storyJson.append({
            "latitude": story.latitude,
            "longitude": story.longitude,
                "headline": story.title,
                "copy": story.copy,
                'author': story.author.username,
                'topic': story.topic
        })
    return render_to_response("report/storyline.html",
                                {'stories': all_stories,
                                "story_Json":json.dumps(storyJson)},
                                context_instance=RequestContext(request))

这是与显示当前信息相关的模板部分:

    function loadMarkers(stories){
    for (i=0;i<stories.length;i++) {
        var story = stories[i];

        (function(story) {
            var pinColor = "69f2ff";
                var pinImage = new google.maps.MarkerImage("http://chart.apis.google.com/chart?chst=d_map_pin_letter&chld=S|" + pinColor,
                    new google.maps.Size(21, 34),
                    new google.maps.Point(0,0),
                    new google.maps.Point(10, 34));
          var point = new google.maps.LatLng(story.latitude, story.longitude);
          var marker = new google.maps.Marker({position: point, map: map, icon: pinImage});
          var infowindow = new google.maps.InfoWindow({
            content: '<div >'+
                '<div >'+
                '</div>'+
                '<h2 class="firstHeading">'+story.headline+'</h2>'+
                '<div>'+
                '<p>'+story.author+'</p>'+
                '<p>'+story.topic+'</p>'+
                '<p>'+story.copy+'</p>'+

                '</div>'+
                '</div>'

          });
          google.maps.event.addListener(marker, 'click', function() {
            infowindow.open(map,this);
          });
        })(story);
    }
}

任何有关如何实现这一点的见解将不胜感激。

4

1 回答 1

1

部分答案涉及您尚未发布的内容,因此我将做出假设,您可以进行推断。

您真正需要做的就是reverse()为每个故事使用一个值并将它们包含在您的 json 值中。反向需要指向您指向单个故事视图的 url 。让我们假设您的单个故事视图如下所示:

url(r'^story/(\d+)/$', 'story.views.story_details', name="story-details")

现在,当您为每个故事构建 dict 值时,请包含一个反向url:

from django.core.urlresolvers import reverse

host_url = "http://%s" % request.META['HTTP_HOST']

for story in all_stories:
    full_url = '%s%s' % (host_url, reverse('story-details', args=(story.id,)))
    storyJson.append({
        "latitude": story.latitude,
        "longitude": story.longitude,
            "headline": story.title,
            "copy": story.copy,
            'author': story.author.username,
        'topic': story.topic,
        'url': full_url
    })

这部分只是一个假设,但我认为您的“信息窗口”格式可能如下所示:

content: '<div >'+
...
'<a href="'+story.url+'">View Story</a>'+
'</div>'+
于 2012-06-20T05:35:30.137 回答