我的通用DetailView不显示项目列表

时间:2019-06-14 09:03:09

标签: django django-views

我正在阅读django教程系列,音乐网站上包含ListView,其中包含专辑(正在显示),但是没有显示每个专辑中包含歌曲列表的DetailView。

我曾尝试在for循环中更改迭代名称,但仍无法正常工作,该列表显示了何时不使用通用方法,即使用索引和详细信息函数而不是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 个答案:

答案 0 :(得分:1)

您在模板中使用了 错误的上下文变量名称(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() method--Django Doc