在单个Django 2应用中创建嵌套名称空间

时间:2018-06-25 15:41:07

标签: django django-urls

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

我的应用名为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')),
]

在我的根网址文件中:

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

1 个答案:

答案 0 :(得分:1)

检查包含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/

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