Django добавляет URL-адреса из проекта в другой проект

У меня есть существующий проект (назовем его основным) на Django и несколько приложений в нем. Есть отдельный проект, тоже в django, и одно приложение внутри него (назовем его вторым). Вот обобщенная файловая структура для проекта "второй":

my_second_project
│   manage.py
│   models.py
│   my_models.py
│   my_views.py
│
├───myapp
│   │   admin.py
│   │   apps.py
│   │   Funcs.py
│   │   models.py
│   │   tests.py
│   │   urls.py <-- from here urls import to project urls file
│   │   views.py
│   │   __init__.py
│   │
│   ├───migrations
│   │   └───...│
├───my_second_project
│   │   asgi.py
│   │   settings.py
│   │   urls.py <-- HERE all urls i need
│   │   wsgi.py
│   │   __init__.py
├───templates
│       ...
│
└───__pycache__
        models.cpython-37.pyc

Вот обобщенная файловая структура для проекта main:

main_project
├───app ...
│   ├───...
├───main_project
│   ├───media
│   │   └───user_uploads
│   ├───settings
│   │   └───base.py
│   └───urls.py
├───app ...
│   ├───...
├───app ...
│   ├───...
└───static
    ├...

Мне нужно интегрировать "второй" проект в мой существующий (основной), в идеале без внесения каких-либо изменений во второй проект. Я пытался сделать это так же, как интегрируются приложения (через включенные URL), но похоже, что это не работает с проектами, потому что django пишет "модуль myapp не найден".

url('data-classifier/', include('my_second_project.my_second_project.urls'))

Есть ли способ добавить "второй" проект к моему "основному", не изменяя "второй"?

1 ответ

Когда вы развертываете эти проекты, они не будут храниться в ближайших каталогах. В идеале они вообще не будут на одном сервере.

Вместо этого, если вы не можете позволить себе копировать (или перемещать) содержимое нужного вам приложения из второго в основной проект, и вы не хотите перенаправлять с помощью nginx, создайте небольшое приложение в своем основном проекте и из urls.py перенаправить на конечные точки секунды.

main_project.my_second_project.urls.py

from django.urls import path
from django.views.generic import RedirectView

app_name = 'my_second_project'
urlpatterns = [
    path('endpoint/', RedirectView.as_view(url='<my_second_project_url>'), name='endpoint')
]

Если вы используете основной локальный сервер на 8000, а второй на 8001, тогда вы должны указать http://localhost:8001/endpoint/ как url там наверху.

Другие вопросы по тегам