python - "admin"子目录触发(无意中)Django 管理页面

标签 python django django-admin

我遇到了一些自定义管理页面触发 Django 管理站点而不是显示我的自定义页面的问题。

我的 urls.py 如下:

urlpatterns = patterns('',
    # ... trimmed ...

    # Admin pages
    url(r'^admin/doc/', include('django.contrib.admindocs.urls')),                       
    url(r'^admin/', include(admin.site.urls)),

    # Lobby Visitor Log
    url(r'^visitorLog', include('lobbyVisitorLog.urls')),
)

在我的 lobbyVisitorLog 应用程序中,我有以下目录结构,指向“管理”页面

lobbyVisitorLog
  - templates
      - admin

我的 lobbyVisitorLog/urls.py 如下:

urlpatterns = patterns('visitorLog.views',
    url(r'^/$', views.home, name='homeView'),
    url(r'^/search', views.search, name='searchView'),
    url(r'^/submit', views.submit, name='submitView'),

    url(r'^/admin/$', views.adminView, name='adminView'),
    url(r'^/admin/import/$', views.adminImportView, name='adminImportView'),

    url(r'^/(?P<guest_type>\w+)$', views.logEntry, name='logEntryView'),
)

管理索引页面的 views.py 如下所示:

def adminView(request):
    return render(request, 'admin/index.html', {}, context_instance=RequestContext(request))

当我转到“mysite/visitorLog/admin/”时,我看到 Django 管理站点显示以下消息:“您无权编辑任何内容。”

但是,如果我将我的“admin”目录更改为“utils”(或除“admin”以外的任何其他目录)并相应地更新我的 views.py,一切都会按预期显示!没关系,我可以处理我的目录被称为“utils”,但它会惹恼我......就够了。

发生了什么导致加载 Django 管理页面而不是我的自定义页面?

最佳答案

默认情况下,django 首先检查您在 TEMPLATE_DIRS 中的每个路径中的“admin/index.html”。如果在那里找不到它,它将开始在模板目录中搜索 INSTALLED_APPS 设置中的每个应用程序。

如果 'django.contrib.admin'INSTALLED_APPS 中首先列出,它将使用 django.contrib 中同名的 'admin/index.html' 模板.admin 应用程序。

'django.contrib.admin' 移动到 INSTALLED_APPS 中的最后位置应该允许它首先在您的 lobbyVisitorLog 应用程序中找到 'admin/index.html',但是这会破坏管理站点,因为它会使用您的应用程序 lobbyVisitorLog 中的“admin/index.html”。

解决这个问题的一个好方法是在应用的模板目录中始终有一个以您的应用命名的子目录。例如:

lobbyVisitorLog
  - templates
    - lobbyVisitorLog
      - admin
        - index.html

然后更新 View 的模板路径:

def adminView(request):
    return render(request, 'lobbyVisitorLog/admin/index.html', {}, context_instance=RequestContext(request))

您可以找到有关 Django 如何加载模板的更多信息 here

关于python - "admin"子目录触发(无意中)Django 管理页面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16110968/

相关文章:

python - Django 多用户对一模型。关于用户的模型

python - 如何在django admin中显示与某个用户相关的记录

python - ModuleNotFoundError : No module named 'DEGNet' while attempting >Python manage. py makemigrations|python 3.7,django 2.1.7

具有多个标题行的 Python 网页抓取表

python - Django - 按用户创建私有(private)页面

Django admin - 允许用户访问特定对象/字段吗?

django - 在modeladmin中对代理模型的用户权限

python - 在函数内修改字典

python - 在深度学习keras的损失函数中添加中间层

python - 使用 Django 模型作为另一个模型的字段?