Como importar urls de aplicativos no arquivo de urls principal django

Dec 01 2020

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.urlsarquivo no urlsarquivo 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 climemanagedo caminho.

Eu tentei maneiras diferentes como,

import clients
import climemanage.clients
from climemanage import clients

Mas nada está funcionando.

Respostas

1 ha-neul Dec 01 2020 at 13:51

A estrutura do seu projeto está errada. Parece que uma startprojectparte ou startappoutra 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.pyestá 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 appisso agora na migrationspasta.

Por causa disso, você nunca poderá adicionar nada de clients.urlsao principal urls.py. Porque seu clientsé o lugar onde está urls.pylocalizado 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 startprojectcomando, 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 appnível urls.pye forms.py. Você deve gerar esses arquivos dentro da apppasta (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 appinteriorproject

$ python manage.py startapp clients project/clients

Se você fez esse trajeto, certifique-se de adicionar em project.clientsvez de clientsem seu INSTALLED_APPS.

Ashwathama Dec 01 2020 at 13:08

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
]
Skip_god Dec 01 2020 at 14:19

Mostre-me sua página client.urls.py, por favor.