Django自定义视图进入管理页面

时间:2011-04-17 12:30:27

标签: django django-admin

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

如何将视图插入管理员?

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

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'对象不是可迭代的错误。

感谢。

4 个答案:

答案 0 :(得分:20)

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

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

然后,您可以查看this blog postquestion以获得更多灵感和细节。


根据您的示例,我真的不明白为什么您不使用常规ModelAdminfiltering options

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

答案 1 :(得分:5)

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

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。:如果你提供了''函数'对象的回溯是不可迭代的“异常(你在访问”list /“时得到这个吗?)那么猜测就会少一些。

答案 2 :(得分:3)

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

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

答案 3 :(得分:0)

您应该覆盖get_urls子类中的ModelAdmin