在单个 Django 2 应用程序中制作嵌套名称空间

Making nested namespaces in a single Django 2 app

我正在尝试在我的 Django 2 应用程序中创建嵌套名称空间。 我知道我需要在我的 urls.py 文件中使用 app_name,但我的问题是,如果我想在单个应用程序中嵌套多个命名空间,我该怎么做?

我的应用名为 account,我希望能够反转以下内容: account:indexaccount:edit:indexaccount:create:indexaccount:edit:email:index 等。我将如何在 Django 2 中处理这个问题?

这是我迄今为止尝试过但没有成功的简化版本。

在我的 account.urls 文件中

app_name = 'account'

email_url = [
    path('', edit_email, name='index')
]

edit_url = [
    path('', edit, name='index'),
    path('email/' include(email_url, namespace='email'))
]

create_url = [
    path('', create, name='index'),
]

urlpatterns = [
    path('', index, name='index'),

    # edit
    path('edit/', include(edit_url, namespace='edit')),

    # create
    path('create/', include(create_url, namespace='create')),
]

在我的根 url 文件中:

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

检查包含 Docs

include((pattern_list, app_namespace), namespace=None)

pattern_list 后跟 app_namespace

您必须定义 app_namespace,而不是命名空间

我做过你做过的类似项目,而且很有效。

# top level urls.py
from django.contrib import admin
from django.urls import path, include

urlpatterns = [
    path('admin/', admin.site.urls),
    path('accounts/', include('accounts.urls', namespace='account')),
]

# accounts/urls.py
from django.urls import path, include
from .views import index, create_index, edit_index
app_name = 'accounts'

create_url =[
    path('index/', create_index, name='index'),
]

edit_url =[
    path('index/', edit_index, name='index'),
]


urlpatterns = [
    path('', index, name='index'),
    path('edit/', include((edit_url,'edit'))),
    path('create/', include((create_url, 'create'))),
]

# templates/accounts/index.html
{% url 'accounts:index' %}<br/>
{% url 'accounts:edit:index' %}<br/>
{% url 'accounts:create:index' %}<br/>

# on the website
/accounts/
/accounts/edit/index/
/accounts/create/index/

希望对您有所帮助。玩得开心!