Como importar urls de aplicativos no arquivo de urls principal django
Eu tenho a seguinte estrutura de projeto.

Este é meu array INSTALLED_APPS.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'climemanage.clients'
]
Em seguida, tentei adicionar o clients.urls
arquivo no urls
arquivo principal conforme abaixo.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('clients/', include('clients.urls'))
]
Mas estou recebendo este erro. ModuleNotFoundError: No module named 'clients'
Posso resolver isso usando o seguinte caminho. include('climemanage.clients.urls')
mas eu quero pular climemanage
do caminho.
Eu tentei maneiras diferentes como,
import clients
import climemanage.clients
from climemanage import clients
Mas nada está funcionando.
Respostas
A estrutura do seu projeto está errada. Parece que uma startproject
parte ou startapp
outra pode dar errado. Seria melhor se você pudesse listar como você chegou até este ponto. Veja a estrutura que coloquei no final da minha resposta.
No seu caso, seu principal settings.py
está abaixo clients
. Isso significa que clients
é o resultado de startproject
. Atualmente você não tem um app
, mas tem um monte de arquivos que deveriam aparecer com app
isso agora na migrations
pasta.
Por causa disso, você nunca poderá adicionar nada de clients.urls
ao principal urls.py
. Porque seu clients
é o lugar onde está urls.py
localizado seu principal .
Eu coloco o que eu normalmente faço aqui (esta versão mac, se você estiver usando windows, você precisa verificar o tutorial do 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
então, depois disso, quando você executar seu startproject
comando, certifique-se de executar como abaixo:
django-admin startproject project .
Observe o .
no final.
Depois disso, você deve ter uma estrutura como:
clienmanage
|--- manage.py
|--- project
| |--- __init__.py
| |--- settings.py
| |--- urls.py
| |--- wsgi.py
|--- virtual
|
|___ requirements.txt
então você irá:
$ 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
Após esta etapa, o django não gerará automaticamente o app
nível urls.py
e forms.py
. Você deve gerar esses arquivos dentro da app
pasta (no meu caso de exemplo clients
)
**** Se você deseja colocar o aplicativo em um diretório diferente, você pode especificar o destino.
$ python manage.py startapp <app_label> [destination]
no caso acima, se você quiser ter o seu app
interiorproject
$ python manage.py startapp clients project/clients
Se você fez esse trajeto, certifique-se de adicionar em project.clients
vez de clients
em seu INSTALLED_APPS
.
No arquivo urls.py principal, você pode adicionar o seguinte trecho de código.
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('something/', include('clients.urls')),
]
No arquivo 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
]
Mostre-me sua página client.urls.py, por favor.