Перенаправление на маршруты, имеющие одинаковый url в нескольких приложениях
Я новичок в кодинге, так что извините, если это глупый вопрос, но я нигде не смог найти четкого ответа. Итак, у меня есть проект django с двумя приложениями внутри, оба имеют корень '/', какой точный формат и реализация для использования return redirect('/'), чтобы позволить django различать эти два корня в разных приложениях, возможно, используя маршруты именования. Пошаговое руководство будет оценено по достоинству, заранее спасибо.
Например, у вас есть проект django под названием InitialProject и проект имеет 2 приложения внутри, назовем их MyApp1 и MyApp2.
Структура вашей директории должна выглядеть примерно так:
PythonProject/
├─ InitialProject/
│ ├─ __init__.py
│ ├─ asgi.py
│ ├─ settings.py
│ ├─ urls.py
│ ├─ wsgi.py
├─ MyApp1/
│ ├─ migrations/
│ ├─ filters.py
│ ├─ tests.py
│ ├─ urls.py
│ ├─ views.py
│ ├─ models.py
│ ├─ __init__.py
│ ├─ admin.py
│ ├─ apps.py
├─ MyApp2/
│ ├─ migrations/
│ ├─ filters.py
│ ├─ tests.py
│ ├─ urls.py
│ ├─ views.py
│ ├─ models.py
│ ├─ admin.py
│ ├─ __init__.py
│ ├─ apps.py
Во-первых, URL уникальны, то есть 1 URL может вести только к одному пути или одной функции представления в данном случае. Но что мы можем сделать, так это сказать, что URL, начинающийся с 'APP1' должен искать функцию в MyApp1/urls.py, а URL, начинающийся с 'APP2' должен искать в MyApp2/urls.py
Итак, в InitialProject/urls.py мы определяем его следующим образом:
from django.urls import path
from django.urls.conf import include
urlpatterns = [
path('APP1/', include('MyApp1.urls')), # Note the trailing forward slash, it is important
path('APP2/', include('MyApp2.urls')),
]
Итак, что это делает: если ваш URL имеет вид: HTTP://localhost/APP1/ он скажет Django искать в MyApp1/urls.py для разрешения и получения функции и аналогично для APP2.
Теперь в MyApp1/urls.py мы можем сделать вот что:
from . import views
from django.urls import path
urlpatterns = [
path('', views.my_function_1), # This URL will resolve as HTTP://localhost/APP1/
path('second_url', views.my_function_2), # This URL will resolve as HTTP://localhost/APP1/second_url
]
Аналогично можно сделать и для MyApp2. Этот метод позволяет получить более чистую структуру URL, а также легко ориентироваться и видеть, какое приложение вызывается.
Надеюсь, вы сможете понять, как работают шаблоны URL.
Вы можете спросить, почему мы определили начальный шаблон URL в InitialProject/urls.py? Потому что по умолчанию Django сначала обращается к директории проекта, чтобы увидеть шаблоны URL, и только оттуда мы можем связать шаблоны URL других приложений.