有没有办法将变量传递给 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 中的“扩展”模板?

有没有办法将变量传递给 django 模板中的 <div> id?

Django 表单向导 - 将请求传递给视图?

将 Pk 或 Slug 传递给 Django 中的通用 DetailView?

python Django:将表单视图中的变量传递给表单

如何从 Django 视图将变量传递给 SCSS