2011-08-29 169 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獲取更多信息。

然而,寫意見,尤其是現在的觀點是基於類的,是從長遠來看,一個更加靈活和乾的做法。

相關問題