Django 项目:命名空间“管理员”不是唯一的

Posted

技术标签:

【中文标题】Django 项目:命名空间“管理员”不是唯一的【英文标题】:Django Project: namespace 'admin' isn't unique 【发布时间】:2018-06-04 14:55:26 【问题描述】:

在尝试运行 C:\Python34/python manage.py makemigrations 时,我收到以下错误:(遵循来自 www.testandtrack.io 的教程)

错误

WARNINGS: ?: (urls.w005) URL namespace 'admin' isn't unique. You may not be able to reverse all URLS in this namespace

我具体需要更改哪些内容以及需要查看哪些内容?

teachers/url.py

from django.contrib import admin
from django.urls import path
from django.urls import include, path
from . import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('', views.teachers, name='teachers'),
    
]

url.py

from django.contrib import admin
from django.urls import include, path
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', include('main.urls')),
    path('teachers/', include('teachers.urls')),
]

ma​​in/url.py

urlpatterns = [
    path('admin/', admin.site.urls),
    path('header/', views.header, name='header'),
    path('', views.index, name='index'),
    
]

我已经粘贴了上面的各种 url.py 文件,并认为这是某个地方的问题。谁能指出我正确的方向,请解释一下?

我认为我可以/应该删除

路径('admin/', admin.site.urls),

除了 urls.py 文件(根)之外的所有文件......当我删除它时,我没有得到同样的错误,但我不知道这是否会导致其他问题,如果这是正确的做法?

【问题讨论】:

【参考方案1】:

你在声明

path('admin/', admin.site.urls),

在您的 urls 文件中出现三次。您只需在项目的 root urls.py 中声明一次。

【讨论】:

【参考方案2】:

您是正确的,因为错误源于在所有 url.py 文件中重复 path('admin/', admin.site.urls),。正如其他人指出的那样,它通常只在根级别声明。

这样想 - 您不希望每个应用程序都有一个单独的管理界面,而是希望能够从一个管理界面管理您的所有应用程序,这正是您拥有它时发生的事情仅在根 urls.py 文件中。

此外,虽然应用程序应该是模块化和独立的,但它们仍然需要连接到项目才能工作。

【讨论】:

【参考方案3】:

这是因为该管理路径的多个声明。从 urls.py 文件中删除那些额外的行 path('admin/', admin.site.urls) 行,项目的 url.py 除外

【讨论】:

【参考方案4】:

将你的 main/urls.py 设置为

from django.urls import path
from django.views.generic import TemplateView

urlpatterns = [ 
    path(
        "header/", 
        TemplateView.as_view(template_name="header.html")),
]

并在主 URLs 文件教师/urls.py 中修复此问题,如下所示:

from django.contrib import admin
from django.urls import path, include
from django.conf import settings


urlpatterns = [
    path(
        'admin/', 
         admin.site.urls), 
    path('', 
         include('main.urls')),
] 

【讨论】:

以上是关于Django 项目:命名空间“管理员”不是唯一的的主要内容,如果未能解决你的问题,请参考以下文章

Django项目:名称空间'admin'不是唯一的

Django生成唯一字符串UUID与MD5

django url别名和反向解析 命名空间

Django(命名空间)

Django 忽略对 urls.py 的更新

在命名空间内设计