Django ListView模板无法渲染blog_list查询集问题求助
问题根源
你是在BlogDetail视图渲染的blog.html模板中引入了table_of_contents.html,但BlogDetail的默认上下文仅包含当前访问的单篇博客对象,不存在blog_list变量。只有当你访问BlogList视图绑定的路由时,上下文才会携带你定义的blog_list查询集。
解决方案
方案1:给BlogDetail视图补充上下文
重写BlogDetail的get_context_data方法,主动把博客列表注入上下文:
from django.views import generic from .models import Blog class BlogList(generic.ListView): queryset = Blog.objects.filter() template_name = 'table_of_contents.html' context_object_name = 'blog_list' class BlogDetail(generic.DetailView): model = Blog template_name = 'blog.html' def get_context_data(self, **kwargs): context = super().get_context_data(**kwargs) # 注入博客列表 context['blog_list'] = Blog.objects.all() return context
方案2:检查路由配置(仅针对直接访问博客列表页的场景)
如果你是直接访问博客列表页没有输出,先确认你的urls.py中已经配置了指向BlogList的路由:
from django.urls import path from .views import BlogList, BlogDetail urlpatterns = [ # 博客列表页路由 path('blogs/', BlogList.as_view(), name='blog_list'), # 博客详情页路由 path('blogs/<int:pk>/', BlogDetail.as_view(), name='blog_detail'), ]
同时检查你的base.html中是否定义了table_of_contents块的占位位置,确保子模板的块内容能被正确渲染。
内容的提问来源于stack exchange,提问作者multigoodverse
相关产品推荐
相关产品推荐

