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
там наверху.