Как реализовать пространства имен Django
Я начал свое путешествие с Django и мне это очень нравится. У меня есть вопрос о пространствах имен, и я надеюсь, что кто-нибудь сможет мне помочь и объяснить, почему это работает именно так.
Как я понимаю, пространства имен используются для того, чтобы убедиться, что если у вас есть две страницы с одинаковым именем, то функция url и обратная функция указывают на нужную страницу. Я пытался реализовать пространства имен в тестовом приложении, которое я пишу, но не смог этого сделать.
Вот что у меня есть на данный момент (Это без пространств имен, так как я не смог заставить это работать.
Извлечь из app urls.py
from django.urls import path, re_path
from . import views
urlpatterns = [
path('', views.index, name = "index"),
]
project urls.py
from django.contrib import admin
from django.urls import path, include, re_path
import gallery
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls')),
path('index/', include('gallery.urls')),
]
И, наконец, вот мой файл view.py в папке app
from django.shortcuts import render
from django.urls import reverse
# Create your views here.
def index(request):
return render(request,"gallery/index.html")
Любая помощь будет оценена по достоинству
Пространства имен URL позволяют уникально обращать именованные шаблоны URL, даже если разные приложения используют одинаковые имена URL. Это хорошая практика для сторонних приложений - всегда использовать URL с именами (как мы делали в учебнике). Аналогичным образом, эта функция позволяет обращать URL-адреса, если развернуто несколько экземпляров приложения. Другими словами, поскольку несколько экземпляров одного приложения будут использовать общие именованные URL, пространства имен дают возможность различать эти именованные URL. См. Пространства имен URL
В вашем случае:
проект urls.py
from django.contrib import admin
from django.urls import path, include, re_path
import gallery
urlpatterns = [
path('admin/', admin.site.urls),
path('accounts/', include('django.contrib.auth.urls', namespace='your-namespace')),
path('index/', include('gallery.urls',namespace='your-namespace')),
]
Извлечь из app urls.py
from django.urls import path, re_path
from . import views
app_name = 'app'
urlpatterns = [
path('', views.index, name = "index"),
]
в шаблоне:
{% url 'app:index' %}