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}} в некоторых местах, но все по-прежнему работает отлично.