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

#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. Спасибо. Но это не подходит для меня. Я перепишу свой второй проект в приложение