Cómo importar URL de aplicaciones en el archivo de URL principal de django
Tengo la siguiente estructura de proyecto.

Esta es mi matriz INSTALLED_APPS.
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'climemanage.clients'
]
Luego intenté agregar el clients.urls
archivo en el urls
archivo principal como se muestra a continuación.
from django.contrib import admin
from django.urls import include, path
urlpatterns = [
path('admin/', admin.site.urls),
path('clients/', include('clients.urls'))
]
Pero recibo este error. ModuleNotFoundError: No module named 'clients'
Puedo resolver esto usando la siguiente ruta. include('climemanage.clients.urls')
pero quiero saltarme climemanage
del camino.
He probado diferentes formas como,
import clients
import climemanage.clients
from climemanage import clients
Pero nada funciona.
Respuestas
La estructura de su proyecto es incorrecta. Parece que una startproject
parte o una startapp
parte pueden salir mal. Sería mejor si pudiera enumerar cómo llegó hasta este punto. Por favor vea la estructura que puse al final de mi respuesta.
En tu caso, tu main settings.py
está debajo clients
. Esto significa que clients
es el resultado de startproject
. Actualmente no tiene un app
, pero tiene un montón de archivos que deberían aparecer con app
eso ahora en la migrations
carpeta.
Por eso, nunca podrá agregar nada de clients.urls
main urls.py
. Porque tu clients
es el lugar donde se encuentra tu principal urls.py
.
Pongo lo que normalmente hago aquí (esta versión de mac, si está usando Windows, necesita verificar el tutorial de 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
luego, después de eso, cuando ejecute su startproject
comando, asegúrese de ejecutarlo como se muestra a continuación:
django-admin startproject project .
Tenga .
en cuenta el al final.
Después de eso, debería tener una estructura como:
clienmanage
|--- manage.py
|--- project
| |--- __init__.py
| |--- settings.py
| |--- urls.py
| |--- wsgi.py
|--- virtual
|
|___ requirements.txt
entonces, lo harás:
$ 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
Después de este paso, django no generará automáticamente app
level urls.py
y forms.py
. Debería generar estos archivos dentro de la app
carpeta (en mi caso de ejemplo, clients
)
**** Si desea poner la aplicación en un directorio diferente, puede especificar el destino.
$ python manage.py startapp <app_label> [destination]
en el caso anterior, si quieres tener tu app
interior deproject
$ python manage.py startapp clients project/clients
Si tomó esta ruta, asegúrese de agregar en project.clients
lugar de clients
su INSTALLED_APPS
.
En el archivo urls.py principal, puede agregar el siguiente fragmento de código.
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('something/', include('clients.urls')),
]
En el archivo 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
]
Muéstrame tu página client.urls.py, por favor.