Создание вложенных пространств имен в одном приложении Django 2 - PullRequest
0 голосов
/ 25 июня 2018

Я пытаюсь создать вложенные пространства имен в своем приложении в 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')),
]

1 Ответ

0 голосов
/ 24 октября 2018

Проверьте, включены ли Документы

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

pattern_list, за которым следует 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/

Надеюсь, это поможет вам. Веселись!

...