Я встраиваю 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.