如何对django的admin.site工具指定App使用?


安装手册或者文档中一般都是这么配置的
在 ROOT_URLCONF 文件 urls.py中中


 from django.contrib import admin
admin.autodiscover()#貌似在1.8版本是默认开启的?

urlpatterns += [url((r'^admin/', include(admin.site.urls)))]

如果我的 project 总有 A,B,C 等App

在我的 INSTALLED_APPS 中有一些App都自带 admin.py 进行管理,例如自带的Auth模块和一些第三方模块。怎么在 admin.site 取消注册这些App,当然了直接在admin.py源代码的注释掉 admin.site.register 也行,可是这样不太好也不太方便。我不清楚如何指定App在admin.site中进行注册,而不是 autodiscover

django-admin python web django

train 9 years, 6 months ago

你说的是admin site?

这玩意儿你不注册过去在后台也能用?(admin.site.register) 这和url配置有啥关系呢- -

holmors answered 9 years, 6 months ago

这确实是个很简单的问题,可能是看文档脑袋看糊了。

文档中一般提到的都是这么配置,修改 urls.py


 from django.conf.urls import patterns, url, include
# ......
from django.contrib import admin
admin.autodiscover()

urlpatterns = patterns('',
    (r'^admin/', include(admin.site.urls)),
    # ......
)

admin.autodiscover() 这个函数会将你在django INSTALLED_APPS 中有 admin.py 文件都尝试注册进 admin.site 中去。

你可以不用 admin.autodiscover() ,单独为A应用注册一个管理页面。


 from A.admin import admin as Aadmin
from B.admin import admin as Badmin
urlpatterns = patterns('',
    (r'^A/admin/', include(Aadmin.site.urls)),
    (r'^A/admin/', include(Badmin.site.urls)),
    # ......
)

参考 Why isn't admin.autodiscover() called automatically in Django when using the admin, why was it designed to be called explicitly?

当你的 INSTALLED_APPS 中有一些不需要在admin页面中进行管理的,例如,你有A,B,C三个APP,只想让C不在管理页面中,A和B都在管理页面中进行注册。


 from A.admin import admin
from B.admin import admin
urlpatterns = patterns('',
    (r'^admin/', include(admin.site.urls)),
    # ......
)

从不同的包引入相同名字的对象,貌似也没出什么错。。

yinyin answered 9 years, 6 months ago

Your Answer