#python #django #django-project-architect
#python #django #django-project-architect
Вопрос:
У меня есть существующий проект (назовем его main) на Django и несколько приложений в нем. Существует отдельный проект, также в django, и одно приложение внутри него (мы будем называть это вторым). Вот обобщенная файловая структура для проекта «second»:
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-адресов include), но, похоже, это не работает с проектами, потому что django пишет «модуль myapp не найден».
url('data-classifier/', include('my_second_project.my_second_project.urls'))
Есть ли какой-нибудь способ добавить «второй» проект в мой «основной» проект без изменения «второго»?
Ответ №1:
При развертывании этих проектов они не будут храниться в близлежащих каталогах. В идеале они вообще не будут находиться на одном сервере.
Вместо этого, если вы не можете позволить себе копировать (или перемещать) содержимое нужного вам приложения из второго в основной проект, и вы не хотите перенаправлять с помощью nginx, создайте небольшое приложение в своем основном проекте и urls.py
перенаправляйте с него на конечные точки second.
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')
]
Если вы запускаете main локально на 8000, а second — на 8001, тогда вы должны поместить ‘http://localhost:8001/endpoint /’как url
там, наверху.
Комментарии:
1. Спасибо. Но это не подходит для меня. Я перепишу свой второй проект в приложение