Boostrap Modal и загрузка изображений в Django
Во-первых, я новичок в Django, но постепенно учусь, я развернул пару проектов Django, но я столкнулся с проблемой, когда у меня закончились идеи, как ее решить из-за недостатка знаний. У меня нет опыта работы с фронтендом, я еще не касался Boostrap (хотя, очевидно, знаю немного HTML) или JS в деталях.
Я использую HTML шаблон для создания портфолио фотографии, у меня есть представление альбома с миниатюрами изображений, которые хорошо работают, и у меня есть href
к списку изображений в этом альбоме.
Проблема в том, что шаблон использует Boostrap Modal
для открытия списка изображений на одной странице, это выглядит очень красиво, и я хочу попробовать сохранить это, но не знаю, как передать мои данные Django (т.е. slug из href) через modal
.
Я попытался разделить мой шаблон gallery-detail
, который принимает список изображений альбома, отфильтрованных по альбому, и затем включить его в мой основной шаблон Gallery
, который использует мой Gallery ListView для показа миниатюр. Я думал, что modal
будет работать таким образом, так как технически они могут находиться на одной странице?
Я просто не уверен, как мне передать контекст представления в modals
? Ниже приведен мой соответствующий код, который, надеюсь, поможет понять, что я пытаюсь сделать
Вот где я сейчас нахожусь.... модал загружается на той же странице, но никаких изображений не показывается, только значок закрытия X. Если я щелкаю правой кнопкой мыши и открываю URL, то все изображения открываются, соответствующие этому альбому, но без css или стилизации.
Модели
name = models.CharField(max_length=200, null=True)
slug = AutoSlugField(populate_from='name')
created = models.DateTimeField()
visable = models.BooleanField(default=False)
type = models.ForeignKey(Category, on_delete=models.CASCADE, null=True, blank=True)
image = models.ForeignKey('Media', on_delete=models.CASCADE)
album_images = models.ManyToManyField('Media', related_name="album_pictures")
def __str__(self):
return str(self.name)
class Media(models.Model):
timestamp = models.DateTimeField()
image = models.ImageField(upload_to="media")
order = models.IntegerField(default=0)
visable = models.BooleanField(default=True)
categories = models.ForeignKey(Category, on_delete=models.CASCADE, null=True, blank=True)
class Meta:
verbose_name_plural = "Media"
Виды. Достаточно просто.
class GalleryView(ListView):
template_name = "main/gallery.html"
model = Albums
class GalleryDetailView(ListView):
template_name = "main/gallery-detail.html"
model = Media
def get_queryset(self):
gallery = get_object_or_404(Albums, slug=self.kwargs['slug'])
print(gallery)
return Media.objects.filter(album_pictures=gallery)
Шаблоны. Галерея.
{% extends "main/base.html" %}
{% load static %}
{% block gallery %}
{% for gallery in object_list %}
<div class="item col-xs-6 col-sm-6 col-md-4">
<figure class="overlay"> <a href="{% url 'main:gallery_detail' gallery.slug %}" data-toggle="modal" data-target="#myModal1">
<div class="text-overlay caption">
<div class="info">
<h2 class="post-title">{{ gallery.name }}</h2>
<div class="meta"> <span class="count">7 Photos</span> <span class="category">Hobby</span></div>
</div>
</div>
<img src="{{ gallery.image.image.url }}" alt="" /></a> </figure>
</div>
{% endfor %}
{% include "main/gallery-detail.html" %}
{% endblock %}
Шаблон галереи-детали
{% extends "main/base.html" %}
{% load static %}
{% block gallery %}
{% for gallery in object_list %}
<div class="item col-xs-6 col-sm-6 col-md-4">
<figure class="overlay"> <a href="{% url 'main:gallery_detail' gallery.slug %}" data-toggle="modal" data-target="#myModal1">
<div class="text-overlay caption">
<div class="info">
<h2 class="post-title">{{ gallery.name }}</h2>
<div class="meta"> <span class="count">7 Photos</span> <span class="category">Hobby</span></div>
</div>
</div>
<img src="{{ gallery.image.image.url }}" alt="" /></a> </figure>
</div>
{% endfor %}
{% include "main/gallery-detail.html" %}
{% endblock %}