Перенаправление на маршруты, имеющие одинаковый 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 других приложений.

Вернуться на верх