Мой общий DetailView не показывает список элементов - PullRequest
1 голос
/ 14 июня 2019

Я слежу за серией уроков по django, на музыкальном веб-сайте есть ListView, который содержит альбомы (это показано), но не отображается DetailView, содержащий список песен в каждом альбоме.

Я попытался изменить имя итерации в цикле for, но он все еще не работает, список показывает, когда я не использую универсальный метод, т.е. использую функции index и detail вместо классов IndexView и DetailView.

МОЙ music.views Код

class IndexView(generic.ListView):
    template_name='music/index.html'
    def get_queryset(self):
        return Albums.objects.all()

class DetailView(generic.DetailView):
    model = Albums
    template_name = 'music/detail.html'

Мой код detail.html, который должен показывать список песен, но не работает

 {% extends 'music/base.html' %}
    {% block title %} Album Details  {% endblock %}
    {% block body %}
            <img src ="{{ all_album.alb_logo }}">
            <h1>{{ all_album.alb_title }}</h1>
            <ul>
            {% for song in all_album.song_set.all %}
            <li>{{ song.song_title }} </li>
            {% endfor %}  
            </ul>    
            <br>
    {% endblock %}

Мой index.html, который показывает список альбомов, это работает

 {% extends 'music/base.html' %}
    {% block body %}
    <h2>List of Current albums available</h2>
    <div class='container-fluid'>
        <div class='row'>
          {% for album in object_list %}  
            <div class='col-lg-4'>                    
                <div class="card" style="width: 18rem;">
                <img class="card-img-top" src="{{ album.alb_logo }}" >
                <div class="card-body">
                    <h5 class="card-title">{{ album.alb_title }}</h5>
                    <p class="card-text">{{ album.alb_artist }}</p>
                    <a href="{% url 'music:detail' album.id %}" class="btn 
                     btn-primary  btn-sm">View details</a>
                </div>
                </div>      
            </div>
              {% endfor %}
          </div>
      </div>  

Мой код urls.py #

 urlpatterns = [
        path('',views.IndexView.as_view(), name='index'),
        path('<int:pk>/', views.DetailView.as_view(), name='detail'),
    ]

Ожидается, что на странице detail.html будет показан список песен в выбранном альбоме, который уже находится в базе данных при нажатии, но не отображается.

1 Ответ

1 голос
/ 14 июня 2019

Вы использовали неверное имя переменной контекста (all_album) внутри шаблона, оно должно быть object.

#detail.html 
{% extends 'music/base.html' %}
{% block title %} Album Details  {% endblock %}
{% block body %}
    <img src="{{ object.alb_logo }}">
    <h1>{{ object.alb_title }}</h1>
    <ul>
        {% for song in object.song_set.all %}
            <li>{{ song.song_title }} </li>
        {% endfor %}
    </ul>
    <br>
{% endblock %}


Ссылка : DetailView get_context_data() метод - Django Doc

...