【问题标题】:Django custom view into admin pageDjango自定义视图进入管理页面
【发布时间】:2011-08-07 07:15:55
【问题描述】:

我创建了一个自定义视图。

如何将视图插入管理员?

对于一个普通的管理类,我们只需将其注册到管理站点即可:

class ListAdmin(admin.ModelAdmin):
   ...

admin.site.register(List, ListAdmin)

我试图覆盖 admin.py 中的 get_url,question_list 是视图:

class ListAdmin(admin.ModelAdmin):
    def list_view(self, request):
        return question_list(request)

    def get_urls(self):
        urls = super(ListAdmin, self).get_urls()
        list_urls = patterns('', r'^list/$', self.list_view())

        return list_urls + urls

admin.site.register(question_list, ListAdmin)

这是 question_list 视图:

def question_list(request):
    #questions = Question.objects.filter(topic__icontains = 1)
    questions = Question.objects.all()
    return render_to_response('admin/question_list.html', {'questions':questions})
question_list = staff_member_required(question_list)

我得到 'function' object is not iterable 错误。

谢谢。

【问题讨论】:

  • 你能说得更具体些吗?
  • 我只想在站点管理员中添加一个自定义视图。我在views.py 中创建了一个视图。如何在 admin.py 中将其添加到 admin 中?
  • 视图有什么作用?您可以将 ModelAdmin 子类化以过滤查询集等。但通常您会在前端使用其单独的模板呈现您的自定义视图。
  • 例如我创建了一个视图:'code' def question_list(request): #questions = Question.objects.filter(topic__icontains = 1) questions = Question.objects.all() return render_to_response( 'admin/question_list.html', {'questions':questions}) 'code' 如何将此视图添加到 admin.py 中?

标签: django django-admin


【解决方案1】:

根据您提供的信息,您应该查看 Django 文档的这一部分:

Adding views to admin sites(注意:该链接对 1.5 版有效,因为不再支持 1.3 版 - 该解决方案仍然有效)。

然后您可以查看this blog post 和此question 以获得更多灵感和详细信息。


根据您的示例,我真的不明白您为什么不使用常规的ModelAdmin 和一些filtering options

class QuestionAdmin(admin.ModelAdmin):
    list_filter = ('topic',)

【讨论】:

  • 博客文章的链接已失效。
  • 是的。 “由于 robots.txt,无法抓取或显示页面。”
  • 我编辑了文档以反映解决方案的实时 URL。但是,它应该保持最新,因为 Django 1.5 最多可能在一两年内不受支持。
  • 更新了博文链接。它仍然在同一个 URL 上的他的网站上。
【解决方案2】:

您应该在 ModelAdmin 子类中覆盖 get_urls

【讨论】:

    【解决方案3】:

    模式得到一个视图,而不是调用视图的结果,即:

    list_urls = patterns('', r'^list/$', self.list_view())
    

    应该是

    list_urls = patterns('', r'^list/$', self.list_view)
    

    另外,“list_view”(在这个阶段)是一个和其他视图一样的视图。所以它需要返回一个 HttpResponse 对象。

    def list_view(self, request):
        return question_list(request)
    

    您没有显示 question_list() 的代码,但我怀疑它没有返回 HttpResponse。

    P.S.:如果您提供了“'function' object is not iterable”异常的回溯(您在访问“list/”时得到了这个?),那么猜测就会减少。

    【讨论】:

      【解决方案4】:

      这是一个需要为自定义页面添加的所有内容的示例(从 Django 1.6 开始),该自定义页面将从对象详细信息页面右上角的“历史记录”按钮旁边的按钮链接到:

      https://gist.github.com/mattlong/4b64212e096766e058b7

      【讨论】:

      • 此页面现在不可用
      • 模式元组现在是普通的旧列表,change_form.html {% block.super %} 应该是 {{ block.super }}
      猜你喜欢
      • 2014-06-23
      • 2011-03-09
      • 2019-07-02
      • 1970-01-01
      • 1970-01-01
      • 2020-03-04
      • 2018-06-27
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多