有没有办法将变量传递给 Django 中的通用视图?
Posted
技术标签:
【中文标题】有没有办法将变量传递给 Django 中的通用视图?【英文标题】:Is there a way to pass a variable to a generic view in Django? 【发布时间】:2011-08-29 01:43:39 【问题描述】:我正在使用 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,但创建视图似乎违背了通用 url 的大部分目的。
有没有办法做这么简单的事情?
【问题讨论】:
【参考方案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了解更多信息。
但是,从长远来看,编写视图,尤其是现在当视图基于类时,是一种更加灵活和 DRY 的方法。
【讨论】:
以上是关于有没有办法将变量传递给 Django 中的通用视图?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法将变量传递给 django 模板中的 <div> id?