我按照手册中的描述覆盖了默认的AdminSite类,尽管它过于纯粹,有关于此部分的信息。 我的gs / admin.py文件:
from django.contrib.admin import AdminSite
from django.conf.urls import patterns, url
from gs.views import *
class AdminSiteGs(AdminSite):
def get_urls(self):
urls = super(AdminSiteGs, self).get_urls()
urls += patterns('',
url(r'^my_admin_view/$', self.admin_view(my_admin_view))
)
return urls
admin_site_gs = AdminSiteGs()
这是我的应用程序和项目名称。
gs / urls.py文件:
from django.conf.urls import patterns, include, url
from page import views
from gs.admin import admin_site_gs
urlpatterns = patterns('',
url(r'^admin/', include(admin_site_gs.urls)),
)
我有应用程序命名页面,我放置admin.py文件:
from gs.admin import admin_site_gs
from page.models import Page, Menu
from django.contrib import admin
class PageAdmin(admin.ModelAdmin):
list_display = ('name', 'url', 'page_type')
class MenuAdmin(admin.ModelAdmin):
list_display = ('name', 'code')
admin_site_gs.register(Page, PageAdmin)
admin_site_gs.register(Menu, MenuAdmin)
所以这里没有任何工作=(既没有/ admin / my_admin视图(它返回404),也没有主管理页面/管理员。我没有看到我在page / admin.py文件中注册的模型。
这可能听起来很有趣,但我尝试了所有工作人员在3-4个小时内工作=))你可能会猜到我在Django和Python中都是新手...我现在想知道的是如何附加自定义URL和视图到我的重写类AdminSite?
我删除了autodiscover
方法,所以现在看来Django对文件页面/ admin.py一无所知。
但第一个问题更有趣,为什么我在尝试访问/ admin / my_admin页面时遇到404错误...
PS为什么我在开始时的问候被削减o_O
根据文档,您为自定义管理员视图定义的任何URL模式必须在管理模式之前发生:https://docs.djangoproject.com/en/1.4/ref/contrib/admin/#django.contrib.admin.ModelAdmin.get_urls
尝试:
def get_urls(self):
urls = super(AdminSiteGs, self).get_urls()
my_urls = patterns('',
url(r'^my_admin_view/$', self.admin_view(my_admin_view))
)
return my_urls + urls
你不应该像这样包含这些模式:
urlpatterns = patterns('',
url(r'^admin/', include(admin_site_gs.urls)), # not needed
)
在我的情况下,我必须覆盖默认的“添加网址”,以便在点击管理员中的“+添加”按钮时重定向到自定义Django管理页面。因此,如果我只是以@Brandon所说的方式覆盖get_urls(),它将返回一个带有重复“add”url的列表(自定义的一个和从super中检索到的一个)。
def get_urls(self):
info = self.model._meta.app_label, self.model._meta.model_name
urls = super(RetailerAdmin, self).get_urls()
# We need to remove the original 'add_url' in order to use the custom one.
urls.remove(urls[1])
custom_url = [
url(r'^batch/$', self.admin_site.admin_view(self.batch_upload_retailers),
name='%s_%s_add' % info),
]
return custom_url + urls
为了解决这个问题,我删除了原来的“添加”网址(请注意,“添加”网址始终位于第1位)。