django admin重定向到我的自定义视图

时间:2015-09-22 12:16:39

标签: python django django-admin

在我的管理员中,我想放置自定义视图。当我点击模型名称时,我想重定向到不在模型列表视图上的自定义视图:

class MyAdmin(admin.ModelAdmin):
def get_urls(self):
    urls = super(MyAdmin, self).get_urls()
    csv_urls = patterns('', url(r'^my/url/$', admin.site.admin_view(self.my_view)))

    return csv_urls + urls

def my_view(self, request):
    return render_to_response("my_template.html")

我已使用admin注册了该模型。

我看到了模型名称,但是当我点击它时,它没有被重定向到我的网址来显示我的视图。它被重定向到普通列表视图。

如何将其重定向到我的视图? 提前致谢

2 个答案:

答案 0 :(得分:0)

如果您只想渲染静态模板,可以将模板放在templates/admin/<app name>/<model name>中,并将其命名为change_list.html

或者你可以像这样覆盖changelist_view()

class MyAdmin(admin.ModelAdmin):
     def changelist_view(self, request, object_id, form_url='', extra_context=None):
         return render_to_response("my_template.html")

答案 1 :(得分:0)

要自定义使用admin注册的模型的添加/更改视图,您可以:

  1. 通过在modeladmin中指定添加/更改表单来覆盖它。
  2. 在modeladmin list_display字段中使用自定义字段,该字段允许使用html标记,以便生成可点击的链接。
  3. 选项1是最简单的,并且为您提供了使用管理模板的优势,从模板树中更高的管理模板继承。您的代码应类似于:

    from .forms import MyForm
    
    class MyAdmin(admin.ModelAdmin):
        form = Myform
    

    选项2允许您使用完全独立的新视图。但是你必须自己处理这些权限,如果你想让它看起来像管理员那样,模板需要从管理员模板继承。您可以通过扩展admin/base_site.html

    来实现
    from django.core.urlresolvers import reverse
    from .views import my_view
    
    class MyAdmin(admin.ModelAdmin):
        list_display = ['mychangelink']
    
        def mychangelink(self, obj):
            return '<a href="{0}">Change</a>'.format(reverse(my_view, args=[obj.pk]))
        mychangelink.allow_tags = True
    

    Django默认转义html,这就是为什么你需要允许标签真正使它成为可点击的链接。否则它只是文字。