我正在尝试在Django 2的应用程序中创建嵌套的名称空间。
我知道我需要在app_name
文件中使用urls.py
,但是我的问题是,如果我想在一个应用程序中嵌套多个名称空间,该怎么办?
我的应用名为account
,我希望能够撤销以下内容:
account:index
,account:edit:index
,account:create:index
,account: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')),
]
答案 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/
希望这对您有所帮助。玩得开心!