1

Django モデルのデータを json にシリアル化し、その情報を Google マップの情報ウィンドウに配置しています。これまでのところ正常に動作します。しかし、ユーザーが完全なレポートに移動する URL をクリックできるように、実際の各オブジェクトへのリンクも含めたいと思います。まだハンドルを取得しているため、jsonを使用してこれを達成する方法がわかりません。

基本的に json を使用して、Google マップの情報ウィンドウに実際のオブジェクト (この場合は「ストーリー」モデル) へのリンクを提供します。実際のストーリーへのリンクを Google マップの情報ウィンドウに表示したいと考えています。

これは私の見解です:

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 に答える