Почему я не могу отобразить два просмотра списка в одном шаблоне?

Я работаю над проектом Django, в котором администратор может загрузить баннер-герой на сайт, а также может загрузить уведомление на главную страницу сайта. Для этого я сделал listviews для перечисления двух HeroListView и NotificationListView. Но второй из них не отображается на странице. Пожалуйста, подскажите, как решить эту проблему.

Это файл models.py

from django.db import models
class Hero(models.Model):
   image = models.ImageField(upload_to="heros/")

class Notification(models.Model):
   notification = models.CharField(max_length=200)

Это файл views.py.

from django.views.generic import ListView
from .models import Hero, Notification

class HeroListView(ListView):
   model = Hero
   template_name = "home.html"
   context_object_name = "hero_list"

class NoticficationListView(ListView):
   model = Notification
   template_name = "home.html"
   context_object_name = "notification_list"

это файл app/urls.py

from django.urls import path
from .views import HeroListView, NoticficationListView

urlpatterns = [
    path("", HeroListView.as_view(), name="home"),
    path("", NoticficationListView.as_view(), name="home"),
 ]

это файл project/urls.py

from django.contrib import admin
from django.urls import path, include
from django.conf import settings 
from django.conf.urls.static import static

urlpatterns = [
   path('admin/', admin.site.urls),
   path("", include("heros.urls")),
   path("", include("products.urls")),
  ] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

{% extends '_base.html' %}

{% block title %}Home{% endblock title %}

{% block content %}
{% load static %}
<div class="container mt-4">
    <div id="carouselExampleControls" class="carousel carousel-dark slide" data-bs-ride="carousel">
        <div class="carousel-inner">
          <div class="carousel-item active">
            <img src="{% static 'images/hero2.jpg' %}" class="d-block w-100" alt="..." style="max-height: 400px;">
          </div>
          {% for hero in hero_list %}
          <div class="carousel-item">
            <img src="{{ hero.image.url }}" class="d-block w-100" alt="..." style="max-height: 400px;">
          </div>
          {% endfor %}
        </div>
        <button class="carousel-control-prev" type="button" data-bs-target="#carouselExampleControls" data-bs-slide="prev">
            <span class="carousel-control-prev-icon" aria-hidden="true"></span>
            <span class="visually-hidden">Previous</span>
          </button>
          <button class="carousel-control-next" type="button" data-bs-target="#carouselExampleControls" data-bs-slide="next">
            <span class="carousel-control-next-icon" aria-hidden="true"></span>
            <span class="visually-hidden">Next</span>
          </button>
      </div>
      <div class="div">
        {% for note in notification.list %}
        <p>{{ note.notification }}</p>
        {% endfor %}
      </div>
</div>
{% endblock content %}

пожалуйста, подскажите, как решить эту проблему.

Вы можете сделать это так

class HeroListView(ListView):
    model = Hero
    template_name = "home.html"

    def get_context_data(self):
        context = super(HeroListView, self).get_context_data()
        context['hero_list'] = Hero.objects.all()
        context['notification_list'] = Notification.objects.all()
        
        return context

Вы не можете получить доступ к двум или нескольким представлениям одновременно, поэтому в вашем случае вы можете удалить NoticficationListView и использовать только HeroListView для визуализации как hero_list, так и notification_list

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