Как отобразить слайд-шоу изображений с помощью Bootstrap Carousel в Django?
Я пытаюсь отобразить слайд-шоу с помощью Bootstrap Carousel в Django. Идея заключается в том, чтобы показывать несколько изображений в слайд-шоу для каждой детали события (привязанной к внешнему ключу). Я полагаю, что это может быть связано с обработкой изображений в файле settings.py. Какой код нужно добавить, чтобы это заработало?
Вот изображение того места, где я хотел бы показать слайд-шоу, но оно не работает.
admin.py
from django.contrib import admin
from .models import Person, PersonDetail, Event, EventDetail, EventImage
admin.site.register(Person)
admin.site.register(PersonDetail)
admin.site.register(Event)
admin.site.register(EventDetail)
admin.site.register(EventImage)
models.py
from django.db import models
class Person(models.Model):
person_text = models.CharField(max_length=200)
def __str__(self):
return self.person_text
class PersonDetail(models.Model):
person = models.ForeignKey(Person, on_delete=models.CASCADE)
person_subtext = models.TextField()
def __str__(self):
return f"{self.person_subtext[:50]}..."
class Event(models.Model):
event_text = models.CharField(max_length=200)
def __str__(self):
return self.event_text
class EventDetail(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE)
event_subtext = models.TextField()
def __str__(self):
return self.event_subtext
class EventImage(models.Model):
event = models.ForeignKey(Event, on_delete=models.CASCADE)
image = models.ImageField(upload_to='pics/%y/%m/%d/')
title = models.CharField(max_length=150)
sub_title = models.CharField(max_length=100)
def __str__(self):
return self.title
views.py
from django.shortcuts import render
from .models import Person, Event, EventImage
def index(request):
"""The home page for History Gallery."""
return render(request, 'galleries/index.html')
def persons(request):
"""Show all persons."""
persons = Person.objects.all()
context = {'persons': persons}
return render(request, 'galleries/persons.html', context)
def person_detail(request, person_id):
"""Show a single person's details."""
person = Person.objects.get(id=person_id)
person_details = person.persondetail_set.all()
context = {'person': person, 'person_details': person_details}
return render(request, 'galleries/person_detail.html', context)
def events(request):
"""Show all events."""
events = Event.objects.all()
context = {'events': events}
return render(request, 'galleries/events.html', context)
def event_detail(request, event_id):
"""Show a single event's details."""
event = Event.objects.get(id=event_id)
images = EventImage.objects.all()
event_details = event.eventdetail_set.all()
context = {'event': event, 'event_details': event_details, 'images': images}
return render(request, 'galleries/event_detail.html', context)
event_detail.html
{% extends 'galleries/base.html' %}
{% block page_header %}
<h1>{{ event.event_text }}</h1>
{% endblock page_header %}
{% block content %}
{% for event_detail in event_details %}
<div class="card mb-3">
<!-- Card header with timestamp and edit link -->
<h4 class="card-header">
<p>Details</p>
</h4>
<!-- Card body with entry text -->
<div class="card-body">{{ event_detail.event_subtext|linebreaks }}</div>
</div>
{% empty %}
<p>There are no details for this event yet.</p>
{% endfor %}
<div id="carouselExampleCaptions" class="carousel slide">
<div class="carousel-indicators">
<button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="0" class="active" aria-current="true" aria-label="Slide 1"></button>
<button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="1" aria-label="Slide 2"></button>
<button type="button" data-bs-target="#carouselExampleCaptions" data-bs-slide-to="2" aria-label="Slide 3"></button>
</div>
<div class="carousel-inner">
{% for image in images %}
<div class="carousel-item active">
<img src="{{ image.images.url }}" class="d-block w-100" alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>{{ image.title }}</h5>
<p>{{ image.sub_title }}</p>
</div>
</div>
{% endfor %}
</div>
{% endblock content %}