Slug和通用视图

时间:2012-06-16 10:18:00

标签: python django

我有一个名为博客和博客以及帖子和类别模型的应用。

url(r'^(?P<slug>[-\w]+)/$', ListView.as_view(
                    queryset=Post.objects.filter(category=4)[:5],
                    template_name='blog.html')),

我可以看到上面这样的代码

127.0.0.1/categories/php /

上面的网址,我可以看到5篇与第4类的文章。我想要的是让它变得动态。例如,python是第3类

queryset=Post.objects.filter(category='P<pk>\d')[:5]

我尝试了这个但是没有用。还有别的吗?

1 个答案:

答案 0 :(得分:2)

您可以创建自定义ListView并在其中添加功能:

class BlogPostView(ListView):
    template_name = 'blog.html'

    def get(self, request, *args, **kwargs):
        slug = kwargs.get('slug')
        slug_id = ... # code here to determine id of slug's category
        self.queryset = Post.objects.filter(category=slug_id)[:5]
        return super(BlogPostView, self).get(request, *args, **kwargs)

使用以下URL配置:

url(r'^(?P<slug>[-\w]+)/$', BlogListView.as_view()),

Django只会解析URL字符串/正则表达式以确定它具有哪些参数,你不能传递字符串/正则表达式来过滤查询集的对象。