Вывод изображений из моделей в бутстрап слайдер
Необходимо в классах "carousel-item active", "carousel-item" выводить по одному img, привязанный к Slider.
Я присваиваю 3 объекта img к 3 объектам Slider через админ панель Django и вывожу в index.html
В итоге получаю такую картину:
models.py
class Slider(models.Model):
name = models.CharField('Название', max_length=250)
class PostImage(models.Model):
img = models.ImageField('Изображение', upload_to='photos/%Y/%m/%d/', null=True)
slider = models.ForeignKey(Slider, related_name='Images', on_delete=models.SET_NULL, null=True, blank=True)
views.py
def main(request):
slider = Slider.objects.order_by('-id')
return render(request, 'main/index.html', {'slider': slider})
index.html
{% for slider in slider %}
{% for item in slider.Images.all %}
{% if item.img %}
<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item active">
<img class="d-block w-100" style="max-height: 700px" src="{{ item.img.url }}"
alt="First slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" style="max-height: 700px" src="{{ item.img.url }}"
alt="Second slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" style="max-height: 700px" src="{{ item.img.url }}"
alt="Third slide">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
{% endif %}
{% endfor %}
{% endfor %}
так у вас и выводит три слайдера по три img я не спец, но нужно примерно следующее
<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
{% цикл %}
<li data-target="#carouselExampleIndicators" data-slide-to="{% id_slaider %}" class="active"></li>
{% конец_цикл %}
</ol>
<div class="carousel-inner">
{% цикл %}
<div class="carousel-item active">
<img class="d-block w-100" style="max-height: 700px" src="{{ item.img.url }}"
alt="{% img_name %} slide">
</div>
{% конеццикл %}
</div>
<a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>
Нашел решение. Пожалуй, оставлю здесь, может кому понадобится.
<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img class="d-block w-100" style="max-height: 700px" src="{% static 'main/img/welcome.jpg' %}"
alt="First slide">
</div>
{% for slider in slider %}
{% for item in slider.Images.all %}
<div class="carousel-item">
<img class="d-block w-100" style="max-height: 700px" src="{{ item.img.url }}"
alt="Second slide">
<div class="carousel-caption d-none d-md-block">
{% if slider.title %}
<h5 style="color: #0088c2">{{ slider.title }}</h5>
{% endif %}
{% if slider.text %}
<p><a style="color: white;" href="{% url 'news' %}">{{ slider.text }}</a></p>
{% endif %}
</div>
</div>
{% endfor %}
{% endfor %}
</div>
<a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</div>