Mapbox Добавление маркера по умолчанию на веб-карту - django

context. Используя Add a default marker to a web map, я хочу добавить несколько точек в качестве маркеров. В файле views.py в разделе 'marker format' я использую формат маркера

const marker6 = new mapboxgl.Marker() .setLngLat([12.554729, 55.70651]) .addTo(map);

как шаблон для каждой итерации цикла.

Problem
. Тег p с идентификатором 'test' приводит к следующему результату

const marker0 = new mapboxgl.Marker().setLngLat([-2.97,53.43890841]).addTo(map);

const marker1 = new mapboxgl.Marker().setLngLat([-2.29,53.46303566]).addTo(map);

Однако использование того же кода "{{context.vf|join:"
"}}", который выдает выше, который имеет тот же формат, что и рабочие маркеры, не приводит к появлению маркеров.

Спросите
. Возможно ли сделать это более эффективным способом?

Views.py

from django.shortcuts import render
from django.views.generic import TemplateView
import requests
from datetime import date
from datetime import timedelta

from .models import Regions



class HomePageView(TemplateView):
    # template_name = 'home.html'
    def get(self,request):

        # current date is start date
        start_date = date.today()
        # end date
        end_date = start_date #+ timedelta(days=3)

        # footbal api
        url = "http://api.football-data.org/v2/matches"
        querystring = {"dateFrom": start_date, "dateTo": end_date}
        headers = {'X-Auth-Token': "", }
        response = requests.request(
            "GET", url, headers=headers, params=querystring).json()

        #### extract data
        # count of returned fixtures
        count = response['count']
        # count of premier league games
        plist = []
        for i in range(0, count):
            if response['matches'][i]['competition']['name'] == 'Premier League':
                plist.append(response['matches'][i]['homeTeam']['name'])
        pcount = len(plist)

        # data from response
        premierleague = []
        for i in range(0, count):
            comp = response['matches'][i]['competition']['name']
            if comp == 'Premier League':
                home = response['matches'][i]['homeTeam']['name']
                away = response['matches'][i]['awayTeam']['name']
                Lat = Regions.objects.values_list('Lat', flat=True).filter(API_team=home)[0]
                Long = Regions.objects.values_list('Long', flat=True).filter(API_team=home)[0]
                premierleague.append({
                                    'Lat': Lat,
                                    'Long': Long,
                                    })


        # marker format
        vf=[]
        for i in range(len(premierleague)):
            for q,w in premierleague:
                pa = f"const {'marker' + str(i)} = new mapboxgl.Marker().setLngLat([{premierleague[i]['Long']}, {premierleague[i]['Lat']}]).addTo(map);"
        
            vf.append(pa)


        context = {
            'vf': vf,
                    }

        return render(request, 'home.html', {'context': context})

Шаблон

{% extends 'base.html' %} 

{% block content %}


<!-- test marker format -->
<p id=test>
  {{context.vf|join:"<br>"}}
</p>

<div id='map' style='width: container; height: 500px;'></div>

 
<div class="map-overlay">
<fieldset>
<input id="feature-filter" type="text" placeholder="Filter results by name">
</fieldset>
<div id="feature-listing" class="listing"></div>
</div>
 
<script>
    mapboxgl.accessToken = '';
const map = new mapboxgl.Map({
container: 'map',
style: 'mapbox://styles/mapbox/streets-v11',
center: [-2, 53.3],
zoom: 4
});


// Create a default Marker and add it to the map.
   const marker6 = new mapboxgl.Marker()
    .setLngLat([12.554729, 55.70651])
    .addTo(map);
 
// Create a default Marker, colored black, rotated 45 degrees.
   const marker2 = new mapboxgl.Marker({ color: 'black', rotation: 45 })
     .setLngLat([12.65147, 55.608166])
     .addTo(map);

// this marker does not work {{context.vf|join:"<br>"}}
</script>

{% endblock %}

enter image description here

Вернуться на верх