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

kel*_*vin 29 django django-admin

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

如何将视图插入管理员?

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

class ListAdmin(admin.ModelAdmin):
   ...

admin.site.register(List, ListAdmin)
Run Code Online (Sandbox Code Playgroud)

我试图在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)
Run Code Online (Sandbox Code Playgroud)

这是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)
Run Code Online (Sandbox Code Playgroud)

我得到'函数'对象不是可迭代的错误.

谢谢.

ari*_*rie 21

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

向管理站点添加视图(注意:该链接对1.5版有效,因为版本1.3不再受支持 - 解决方案仍然有效).

然后你可以查看这篇博文和这个问题,以获得更多灵感和细节.


基于您的示例,我真的不明白为什么您不使用常规ModelAdmin的一些过滤选项:

class QuestionAdmin(admin.ModelAdmin):
    list_filter = ('topic',)
Run Code Online (Sandbox Code Playgroud)

  • 博客帖子的链接已经死了. (4认同)

Dan*_*air 5

模式获取视图,而不是调用视图的结果,即:

list_urls = patterns('', r'^list/$', self.list_view())
Run Code Online (Sandbox Code Playgroud)

应该

list_urls = patterns('', r'^list/$', self.list_view)
Run Code Online (Sandbox Code Playgroud)

此外,"list_view"(在此阶段)是一个与任何其他视图一样的视图.所以它需要返回一个HttpResponse对象.

def list_view(self, request):
    return question_list(request)
Run Code Online (Sandbox Code Playgroud)

你没有显示question_list()的代码,但我怀疑它没有返回一个HttpResponse.

PS:如果你提供了"'函数'对象不可迭代"的追溯异常(你在访问"list /"时得到这个吗?)那么猜测就会少一些.