Search code examples
djangodjango-generic-views

How to use url pattern named group with generic view?


I'm trying to display blog records for particular author using generic view:

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

But I get NameError: name 'uid' is not defined

Is it possible to use urlconf named groups this way?


Solution

  • You need to create your own implementation of ListView like so:

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

    and then use it in your URLconf:

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

    The documentation for class-based generic views is, in my opinion, not quite up to scratch with the rest of the Django project yet - but there are some examples which show how to use ListView in this way:

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