如何使用具有通用视图的url模式命名组?

时间:2012-06-23 18:08:47

标签: django django-generic-views

我正在尝试使用通用视图显示特定作者的博客记录:

urlpatterns = patterns('',
    url(r'^blog/(?P<uid>[\d+])/$', ListView.as_view(
        queryset=Blog.objects.filter(published=True, author=uid),
    ), name='blog_list'),

但我得到 NameError:名称'uid'未定义

是否可以这样使用urlconf命名组?

1 个答案:

答案 0 :(得分:3)

您需要创建自己的ListView实现,如下所示:

class BlogListView(ListView):
    model = Blog

    def get_queryset(self):
        return super(BlogListView, self).get_queryset().filter(
            published=True, author__id=self.kwargs['uid'])

然后在你的URLconf中使用它:

urlpatterns = patterns('',
    url(r'^blog/(?P<uid>[\d+])/$', BlogListView.as_view(),
        name='blog_list'),

在我看来,基于类的通用视图的文档还没有完全覆盖Django项目的其余部分 - 但是有一些例子说明了如何以这种方式使用ListView

https://docs.djangoproject.com/en/1.3/topics/class-based-views/#viewing-subsets-of-objects