在我的管理员中,我想放置自定义视图。当我点击模型名称时,我想重定向到不在模型列表视图上的自定义视图:
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注册了该模型。
我看到了模型名称,但是当我点击它时,它没有被重定向到我的网址来显示我的视图。它被重定向到普通列表视图。
如何将其重定向到我的视图? 提前致谢
答案 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是最简单的,并且为您提供了使用管理模板的优势,从模板树中更高的管理模板继承。您的代码应类似于:
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,这就是为什么你需要允许标签真正使它成为可点击的链接。否则它只是文字。