我一直很难让ListView在我正在处理的博客项目上按预期呈现。在ListView中使用get_queryset()方法,Django 1.9
我有一个标签模式,这是一个Post模型的一部分,具体如下(从models.py我Post模型):
class Post(models.Model):
(...)
tags = models.ManyToManyField(Tag)
TagListView在views.py
如下:
class TagListView(ListView):
def get_queryset(self):
slug = self.kwargs['slug']
try:
tag = Tag.objects.get(slug=slug)
return tag.post_set.all()
except Tag.DoesNotExist:
return Post.objects.none()
URL的如下(包含在该项目等等,虽然 url(r'^blog/?', include('blog.urls')),
,如下:
url(r'^tag/(?P<slug>[a-zA-Z0-9-]+)?/?$', TagListView.as_view(
paginate_by=5,
model=Tag,
)),
据我所知,在这个例子中,访问URL为localhost:8000/blog/tag/<name-of-tag-here>
的URL调用了Views.py中的TagListView,然后使用get_queryset()
方法生成一个ListView,其中包含具有相同slug的标签,然后寻找一个模板(在/blog/templates/blog
),在我正在查看的教程中,该模板被称为tag_post_list.html
,但文档不清楚ListView如何找到要呈现的模板,而我仅仅是遵循过时的教程。
我对将哪些变量传递给html模板以及如何访问它们有点困惑。从结果中我得到很明显,get_queryset()
实际上并不只是返回具有相同标签列表的帖子。 Furthermore, my css isn't rendering, either (which I've made a separate post for),尽管它很明显是我的base.html
文件中的其他标签和元素。
模板开始{% extends 'base.html' %}
(位于/blog/templates/
),并通过{% for post in object_list %}
访问帖子。 object_list
显然不包含我认为应该的东西,据我所知,这应该是由于我滥用ListView的方法造成的。
谢谢。
这里有一些调试缺失。你确定这个观点实际上被称为?你有没有确保slug的论点是正确的?代码进入'get_queryset'吗?您是否检查过该方法返回的内容?你可以使用调试器完成所有这些工作,或者只需通过打印语句就可以完成相关工作。 –
除了别的,这是一个帖子列表,而不是标签列表,所以模型应该是Post。但这不会影响任何东西。 –
'object_list'实际包含什么?没有?还有别的吗? – YPCrumble