Django присвоение координат точек модели FloatField координатам маркера с помощью Mapbox

В моем проекте есть модель, в которой есть два FloatFields под названием lat и lng для значений координат, которые я хотел бы отобразить на интерактивной карте. Я только начинаю работать с Django и API, поэтому еще очень новичок во многом из этого.

animal = models.CharField(max_length=32, choices=ANIMALS, default=BISON)
image = models.ImageField(upload_to='images', null=True, blank=True)
description = models.TextField(null=True, blank=True)
lat = models.FloatField(blank=True, null=True)
lng = models.FloatField(blank=True, null=True)

def __str__(self):
    return self.animal

Я не уверен, как получить доступ к этим значениям со страницы представления, чтобы я мог использовать их как {{ Django variables }} в моем html шаблоне.

Мои взгляды:

def homePage(request):
    if request.method == 'POST':
        form = PostForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
    else:
        form = PostForm()

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

Я хочу использовать {% for n in posts %} {% endfor %} цикл, чтобы просмотреть все посты в моей базе данных и добавить новые маркеры на карту через:

var marker = new mapboxgl.Marker()
            .setLngLat([-110.5885, 44.4280])
            .addTo(map);
        

Однако эти значения .setLngLat([-110.5885, 44.4280]) должны быть теми, которые указаны в сообщениях.

Я смог понять, как получить доступ к этим плавающим значениям, чтобы использовать их в html-шаблоне для просмотра пользователем. Сначала мне нужно было добавить следующую строку в мой views.py: pst = Post.objects.all()

def homePage(request):
if request.method == 'POST':
    form = PostForm(request.POST, request.FILES)
    if form.is_valid():
        form.save()
else:
    form = PostForm()

pst = Post.objects.all() #this line right here

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

С помощью этого я смог получить доступ к любой переменной поля Post Model в html-шаблоне для всех элементов Post в моей базе данных. Я сделал это с помощью {% for loop %} for p in pst.

{% for p in pst %}
        var pop = new mapboxgl.Popup({offset: [0, -15]})
            .setHTML(
                        `<div">
                            <div>
                                <h2>{{ p.animal }}</h2>
                                <h3>image</h3>
                                <img src="{{ p.image_url }}" style="width: 190px"/>
                                <h3>description</h3>
                                <p>{{ p.description }}</p>
                            </div>
                        </div>`
                        )

        var marker = new mapboxgl.Marker({draggable: true})
            .setLngLat([{{ p.lng }}, {{ p.lat }}])
            .setPopup(pop)
            .addTo(map);
        {% endfor %}

Это дает мне красные линии (предупреждения?) под скобками цикла for, а также под {{p.lng}} и {{p.lat}} в некоторых местах, но все по-прежнему работает отлично.

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