在单个 Django 2 应用程序中制作嵌套名称空间
Making nested namespaces in a single Django 2 app
我正在尝试在我的 Django 2 应用程序中创建嵌套名称空间。
我知道我需要在我的 urls.py
文件中使用 app_name
,但我的问题是,如果我想在单个应用程序中嵌套多个命名空间,我该怎么做?
我的应用名为 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')),
]
在我的根 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/
希望对您有所帮助。玩得开心!
我正在尝试在我的 Django 2 应用程序中创建嵌套名称空间。
我知道我需要在我的 urls.py
文件中使用 app_name
,但我的问题是,如果我想在单个应用程序中嵌套多个命名空间,我该怎么做?
我的应用名为 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')),
]
在我的根 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/
希望对您有所帮助。玩得开心!