2011-08-29 156 views
2

我正在使用Django的通用视图并试图找到一种方法来筛选使用D.R.Y的文章列表。有没有办法将变量传递给Django中的通用视图?

我现在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

如果你不想写你自己的看法,另一种方式你可以做到这一点是通过编写自定义模型管理员。所以,你会写你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获取更多信息。

然而,写意见,尤其是现在的观点是基于类的,是从长远来看,一个更加灵活和干的做法。

相关问题