Карты Ajax и Google не работают в Django

Я использую django-easy-maps для отображения карт на моей странице, и у меня есть несколько ссылок на боковой панели, и когда пользователь щелкает эту ссылку, я хочу обновить карту с адресом в ссылке.

Мой шаблон django для donate.html таков

{% block optionalcode %}
<script>
$(document).ready(function() {
$('.link').click(function() {
var n = $(this).attr("name");
n=n.replace(/\s/g,'+');
$('#results').html('&nbsp;').load('/donate/?n=' + n);
});
});
</script>


{% endblock %}

{% block contenttitle %}{% endblock %}

{% block content %}     
<div class="container-fluid">
<div class="row-fluid">
<div class="span8">


<div class="hero-unit" style="padding:10px 10px 10px 10px">

<div id="results">
<b> <pre class="prettyprint
linenums"> {{addr}} </pre> </b>
{% load easy_maps_tags %}
{% easy_map addr 725 400 %}     
</div>

</div>
</div>





{% endblock %} 

{% block sidebar %} 
<div class="span4">
    <div class="hero-unit" style="padding:10px 10px 10px 10px">

        <div class="accordion" id="accordion2">

       <div class="accordion-group">
              <div class="accordion-heading">
                <a class="accordion-toggle" data-toggle="collapse" data-parent="#accordion2" href="#collapseOne">
                  North Delhi
                </a>
              </div>
              <div style="height: 0px;" id="collapseOne" class="accordion-body collapse">
                <div class="accordion-inner">
                  <ol>
                  <li><a class='link' href="#" name="Some name1">Some link1</a> </li>
                  <li><a class='link' href="#" name="Some name2">Some link2</a> </li>




                  </ol>
                </div>
              </div>
            </div>


</div>
{% endblock %}

и мой код просмотра здесь:

from django.shortcuts import render_to_response
from django.template import RequestContext
from django.http import HttpResponse

def ajax_req(request):
    if request.is_ajax():
        n = request.GET.get('n')
        return render_to_response('donate_res.html', {'addr': n},context_instance=RequestContext(request))


    else :
        return render_to_response('donate.html', {'addr': "Some Address"},context_instance=RequestContext(request))

и donate_res.html — это всего лишь небольшая часть, которая заменяет код div #results.

<b> <pre class="prettyprint linenums"> {{addr}} </pre> </b> 
  {% load easy_maps_tags %} 
  {% easy_map addr 725 400 using "easy_maps/map.html"%}

Проблема в том, что когда я нажимаю ссылку, данные отправляются обратно на страницу, я знаю это, потому что вижу адрес, но карта не отображается. Быстрый взгляд на консоль веб-разработчика в firefox дает эту ошибку.

A call to document.write() from an asynchronously-loaded external script was ignored. @ http://127.0.0.1:8000/donate/

Пожалуйста, скажите мне, что я делаю неправильно, или обходной путь, чтобы удалить эту ошибку... я новичок в Django.


person Dhiraj Thakur    schedule 15.07.2012    source источник
comment
Текст addr или точка?   -  person Maqsood    schedule 17.07.2012
comment
@Maqsood: адрес - это текст.   -  person Dhiraj Thakur    schedule 17.07.2012


Ответы (1)


Взгляните на этот вопрос. Он должен ответить, почему он не работает.

Кроме того, лично я не согласен с тем, как вы это делаете. Он воссоздает и перезагружает карту каждый раз, когда вы нажимаете на ссылку, что не только неэффективно, но и в долгосрочной перспективе вы можете столкнуться с проблемами, связанными с максимальным количеством загрузок карты из Google.

Я бы порекомендовал вам создать свой собственный javascript для загрузки карты и адреса или взглянуть на код, который генерирует django-easy-maps, и посмотреть, можно ли вместо повторного создания контейнера и повторной загрузки javascript карты вы можете просто установить центр карты или точка, где должен быть маркер.

Я мог бы помочь больше, если бы вы могли вставить код, который генерирует django-easy-maps, в {% easy_map addr 725 400 using "easy_maps/map.html"%}

person Maqsood    schedule 16.07.2012
comment
Замещающий html прикрепляет прослушиватель событий к событию загрузки google.maps.event.addDomListener(window, 'load', initialize_map_14);, которое также уже запущено. Вы только пытаетесь перечислить места и изменить список? Сколько у вас локаций? Было бы лучше сохранить текст местоположения и координаты в БД, получить ответ в формате JSON, а затем использовать setTitle(title:string) и setPosition(latlng:LatLng) для перемещения маркера и изменения заголовка. Это было бы НАМНОГО быстрее. Я уже сделал это в Джанго. - person Maqsood; 20.07.2012
comment
Не могли бы вы поделиться этим кодом... в котором вы это сделали... если вы не возражаете. Спасибо.. - person Dhiraj Thakur; 04.08.2012