Как импортировать URL-адреса из приложений в основной файл URL-адресов django
У меня следующая структура проекта.
Это мой массив INSTALLED_APPS.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'climemanage.clients'
]
Затем я попытался добавить clients.urlsфайл в родительский urlsфайл, как показано ниже.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('clients/', include('clients.urls'))
]
Но я получаю эту ошибку. ModuleNotFoundError: No module named 'clients'
Я могу решить эту проблему, используя следующий путь. include('climemanage.clients.urls')но я хочу уйти climemanageс пути.
Я пробовал разные способы, как,
import clients
import climemanage.clients
from climemanage import clients
Но ничего не работает.
Ответы
Структура вашего проекта неправильная. Кажется, что startprojectчасть или startappчасть могут пойти не так. Было бы лучше, если бы вы могли перечислить, как вы дошли до этого момента. См. Структуру, которую я поместил в конце своего ответа.
В вашем случае ваш main settings.pyнаходится под clients. Это означает, что clientsэто результат startproject. В настоящее время у вас нет app, но у вас есть куча файлов, которые должны появиться вместе с ним appв migrationsпапке.
Из-за этого вы никогда не сможете добавить что-либо из clients.urlsв main urls.py. Потому что clientsэто то место, где urls.pyнаходится ваша главная .
Я помещаю сюда то, что обычно делаю (эта версия для Mac, если вы используете Windows, вам нужно проверить руководство по django)
$ mkdir clienmanage $ cd clienmanage
$ python3 -m venv myvenv # set up virtual environment $ source myvenv/bin/activate # go into virtual envionment
After this step you can install django
затем после этого, когда вы запустите свою startprojectкоманду, убедитесь, что выполняете, как показано ниже:
django-admin startproject project .
Обратите внимание .на в конце.
После этого у вас должна получиться такая структура:
clienmanage
|--- manage.py
|--- project
| |--- __init__.py
| |--- settings.py
| |--- urls.py
| |--- wsgi.py
|--- virtual
|
|___ requirements.txt
тогда вы будете:
$ python manage.py startapp clients
clienmanage
|
|---clients # this is the app
| |---migrations
| |---models.py
| |---views.py
| |---apps.py
|--- manage.py
|--- project
| |--- __init__.py
| |--- settings.py
| |--- urls.py
| |--- wsgi.py
|--- virtual # a folder
|
|___ requirements.txt
После этого шага django не будет автоматически генерировать appуровень urls.pyи forms.py. Вы должны сгенерировать эти файлы внутри appпапки (в моем примере clients)
**** Если вы хотите поместить приложение в другой каталог, вы можете указать место назначения.
$ python manage.py startapp <app_label> [destination]
в приведенном выше случае, если вы хотите, чтобы appвнутриproject
$ python manage.py startapp clients project/clients
Если вы выбрали этот маршрут, не забудьте добавить, project.clientsа не clientsв свой INSTALLED_APPS.
В основной файл urls.py вы можете добавить следующий фрагмент кода.
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('something/', include('clients.urls')),
]
В файле settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'rest_framework',
'webapi', # like in my case my appname was webapi
'nameofyourapp', #pay attention here
]
Покажи мне свою страницу client.urls.py, пожалуйста.