【问题标题】:Django is not rendering ListViewDjango 没有渲染 ListView
【发布时间】:2021-05-20 11:15:25
【问题描述】:

我有另一篇与此相关的帖子,但我的代码很复杂,因此沟通很困难。我完全从不必要的细节中剥离了这个问题,并提出了一个非常简单的示例,如下所示:

模板/base.html:

<html>
  <body>
  <p>I am base.html</p>
  {% block content %}
  {% endblock content %}
  </body>
</html>

模板/blog.html:

{% extends 'base.html' %}

{% block content %}

    <p>I am blog.html</p>

    {{ blog_list }}
    {% for blog in blog_list %}
    {{ blog.title }}
    {% endfor %}

{% endblock %}

还有 blog/views.py

from django.views import generic
from .models import Blog


class BlogList(generic.ListView):
    queryset = Blog.objects.filter()
    template_name = 'blog.html'
    # context_object_name = 'blog_list'


class BlogDetail(generic.DetailView):
    model = Blog
    template_name = 'blog.html'

输出如下:

我期待在那里呈现博客标题列表。我调试了 BlogList 类和查询集值是这样的:

<QuerySet [<Blog: First Page>, <Blog: Intro>]>

所以,查询不为空。我对这个问题感到非常沮丧。有谁知道怎么回事?

编辑:这里是 blog/urls.py

urlpatterns = [
    path('<str:parent>/<slug:slug>/', views.BlogDetail.as_view(), name='blog'),
]

还有项目urls.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('qa.urls')),
    path('blog/', include('blog.urls')),
]

【问题讨论】:

  • 我看到BlogDetail 也使用blog.html?请将您的网址格式添加到问题中。
  • 你试过取消评论context_object_name吗?
  • @Mugoma,是的。没有任何改变。
  • @AbdulAzizBarkat 好的。请查看修改。
  • @multigoodverse 以及指向 BlogList 的 url 模式在哪里?...

标签: django listview templates


【解决方案1】:

在@Abdul Aziz Barkat 提供一些线索后,我意识到问题是我应该链接到 BlogDetail 视图而不是 BlogList 视图。因此,我将 blog/urls.py 的 urlpatterns 更改为:

urlpatterns = [
    path('<str:parent>/<slug:slug>/', views.BlogDetail.as_view(), name='blog_list'),
]

现在的问题是 BlogList 不再被渲染,但我们不再需要 BlogList - 我们可以在 BlogDetail 中创建一个查询集并将查询集作为上下文提供。为了实现这一点,我向 BlogDetail 添加了一个查询集变量和一个 get_context_data 方法:

class BlogDetail(generic.DetailView):

    model = Blog
    template_name = 'blog.html'
    queryset = Blog.objects.filter()

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context['blog_list'] = self.queryset
        return context

【讨论】:

    猜你喜欢
    • 2012-05-14
    • 2019-05-15
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-04
    • 1970-01-01
    • 2020-08-27
    相关资源
    最近更新 更多