Django | Безопасный тег, предотвращающий функцию обратного вызова Google Map - PullRequest
0 голосов
/ 24 декабря 2018

Я встраиваю JavaScript-карту Google в свой проект Django.В настоящее время у меня есть карта, работающая при передаче одной модели с использованием синтаксиса {{past_deals | safe}}, где прошлые сделки были переданы с использованием Model.objects.all () из views.py.Я пытаюсь передать другую модель, используя тот же синтаксис: {{list_deals | safe}}.Затем я анализирую данные JSON и использую их для своих нужд.Однако, когда тег «| safe» добавляется только к данным о списках, он не может вызвать функцию InitMap () карт Google.Однако безопасный тег работает в соответствии с указаниями. Когда я просматриваю источник страницы, данные объекта анализируются точно так же, как данные past_deals.

Я пытался использовать DjangoJSONEncoder, но в views.py он предупреждает меня, что и мои списки, и модели PastDeals не повторяются.

views.py

from django.shortcuts import render
from PastTransactions.models import PastTransaction
from Listings.models import Listing
from django.core import serializers


def index(request):
    past_deals = serializers.serialize('json', 
        PastTransaction.objects.all())
    listing_deals = serializers.serialize('json', Listing.objects.all())
    template = 'Map/index.html'
    context = {
        'past_deals': past_deals,
        'listing_deals': listing_deals
    }
    return render(request, template, context)


 <script type="text/javascript">
        // The map to be used throughout script
        var map;
        // Array to hold markers currently on map
        var markers = [];
        // Retrieve data as string from views.py
        var past_deals_string = '{{past_deals | safe}}';
        var listings_string = '{{listing_deals | safe  }}';
        // Parse data
        var past_deals = JSON.parse(past_deals_string);
        var listings = JSON.parse(listings_string);

        function initMap() {
            // Hardcoded lat long of Mid Culver City, Los Angeles
            var myLatLng = {lat: 34.023535, lng: -118.3973563};
            // Create map; zoom scale of 12 is approx city view
            map = new google.maps.Map(document.getElementById('map'), {
                zoom: 12,
                center: myLatLng
            });
            // Set marker with all data
            setMarkers(past_deals)  
            setMarkers(listings)
        }

</script>

обратный вызов:

<script src="https://maps.googleapis.com/maps/api/js? 
key=AIzaSyBR53Iuri5nQc3SJxJKJbUHobVVmDFoB3E&callback=initMap"
    async defer></script>

Я ожидаю увидеть карту, но она загружается только в случае удаления тега | safe изобъект листинга в index.html.

...