有没有办法将变量传递给Django中的通用视图?

时间:2011-08-29 01:43:40

标签: django generics views

我正在使用Django的通用视图,并试图找到一种使用D.R.Y过滤文章列表的方法。

我当前的urls.py文件(仅限相关部分):

all_articles = {
    'queryset'      :   Article.objects.all(),
    'template_name' :   'article/admin.html'
}

url(r'^admin/$', object_list, all_articles, 'admin_article_home'),

我想做类似以下的事情,但没有看似多余的代码:

filter_status_draft = {
'queryset'      :   Article.objects.filter(status = 'Draft'),
'template_name' :   'article/admin.html'
}

filter_status_scheduled = {
'queryset'      :   Article.objects.filter(status = 'Scheduled'),
'template_name' :   'article/admin.html'
}

url(r'^admin/filter/status/draft/$', object_list, filter_status_draft, 'admin_article_status_filter_draft'),
url(r'^admin/filter/status/scheduled/$', object_list, filter_status_scheduled, 'admin_article_status_filter_scheduled'),

似乎必须有一种更有效的方法来实现这一目标。

我已经查看了this answer,但似乎创建一个视图会破坏通用网址的大部分用途。

有没有办法做这么简单的事情?

1 个答案:

答案 0 :(得分:1)

如果您不想编写自己的视图,另一种方法是编写自定义模型管理器。所以你写urls.py就好了:

filter_status_draft = {
    'queryset'      :   Article.objects.drafted(),
    'template_name' :   'article/admin.html'
}

filter_status_scheduled = {
    'queryset'      :   Article.objects.scheduled(),
    'template_name' :   'article/admin.html'
}

查看documentation on writing custom model managers了解详情。

但是,编写视图,特别是现在视图是基于类的视图,从长远来看,它是一种更加灵活和干燥的方法。