【问题标题】:Is there a way to pass a variable to a generic view in Django?有没有办法将变量传递给 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 的大部分目的。

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

【问题讨论】:

    标签: django generics views


    【解决方案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 的方法。

    【讨论】:

      猜你喜欢
      • 2021-05-12
      • 2016-08-26
      • 2021-01-08
      • 2012-12-24
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 2023-04-04
      相关资源
      最近更新 更多