覆盖AdminSite以附加自定义URL

Jam*_*May 2 python django django-admin

我按照手册中的描述覆盖了默认的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()
Run Code Online (Sandbox Code Playgroud)

GS这是我的应用程序和项目名称.

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

我有应用程序命名页面,我在其中放置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)
Run Code Online (Sandbox Code Playgroud)

所以这里没有任何工作=(既没有/ admin/my_admin视图(它返回404),也没有主管理页面/管理员.我没有看到我在page/admin.py文件中注册的模型.

这可能听起来很有趣,但我尝试了所有工作人员在3-4个小时内工作=))你可能会猜到我在Django和Python中都是新手...我现在想知道的是如何附加自定义URL和视图到我的重写类AdminSite?

我删除了autodiscover方法,所以现在看来​​Django对文件页面/ admin.py一无所知.

但第一个问题更有趣,为什么我在尝试访问/ admin/my_admin页面时遇到404错误...

PS为什么我在开始时的问候被削减o_O

Bra*_*don 5

根据文档,您为自定义管理视图定义的任何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
Run Code Online (Sandbox Code Playgroud)

你不应该像这样包含这些模式:

urlpatterns = patterns('',
    url(r'^admin/', include(admin_site_gs.urls)),  # not needed
)
Run Code Online (Sandbox Code Playgroud)