Django 1.3将参数传递给url.py中基于类的通用列表视图的过滤器

dev*_*eng 7 regex tags django url view

这是我在url.py中的代码:

(r'^tag/(?P<tag>\w+)/$',
    ListView.as_view(
        model=List,
        context_object_name='some_list',
        queryset=List.objects.filter(tag__name__in=[tag_name]),
        template_name='some_list.html'))
Run Code Online (Sandbox Code Playgroud)

我想传递(?P<tag>\w+)给" tag_name"过滤器,但我不知道该怎么做.

另外我如何传递多个标签?像这样:

http://www.mysite.com/tag/tag1+tag2+tag3
Run Code Online (Sandbox Code Playgroud)

url.py应该得到" tag1+tag2+tag3",将其拆分为" tag1"," tag2"和" tag3",然后将它们放入" tag__name__in":

queryset=List.objects.filter(tag__name__in=[tag1, tag2, tag3])
Run Code Online (Sandbox Code Playgroud)

基本上我对基于类的通用视图感到困惑.任何的想法?

Ber*_*ant 18

您可以覆盖视图的get_queryset方法并使用您的结果构造一个查询集,例如.

from django.views.generic.list import ListView

class MyList(ListView):
    def get_queryset(self):
        tag_list = self.kwargs['tags'].split('+')
        return List.objects.filter(tag__name__in=tag_list)

# urls.py
...
url(r'tag/(?<tags>[\w\+]+)/', MyList.as_view())
Run Code Online (Sandbox Code Playgroud)