Как импортировать URL-адреса из приложений в основной файл URL-адресов django

Dec 01 2020

У меня следующая структура проекта.

Это мой массив 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

Но ничего не работает.

Ответы

1 ha-neul Dec 01 2020 at 13:51

Структура вашего проекта неправильная. Кажется, что 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.

Ashwathama Dec 01 2020 at 13:08

В основной файл 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
]
Skip_god Dec 01 2020 at 14:19

Покажи мне свою страницу client.urls.py, пожалуйста.