Cómo importar URL de aplicaciones en el archivo de URL principal de django

Dec 01 2020

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.urlsarchivo en el urlsarchivo 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 climemanagedel camino.

He probado diferentes formas como,

import clients
import climemanage.clients
from climemanage import clients

Pero nada funciona.

Respuestas

1 ha-neul Dec 01 2020 at 13:51

La estructura de su proyecto es incorrecta. Parece que una startprojectparte o una startappparte 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.pyestá debajo clients. Esto significa que clientses el resultado de startproject. Actualmente no tiene un app, pero tiene un montón de archivos que deberían aparecer con appeso ahora en la migrationscarpeta.

Por eso, nunca podrá agregar nada de clients.urlsmain urls.py. Porque tu clientses 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 startprojectcomando, 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 applevel urls.pyy forms.py. Debería generar estos archivos dentro de la appcarpeta (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 appinterior deproject

$ python manage.py startapp clients project/clients

Si tomó esta ruta, asegúrese de agregar en project.clientslugar de clientssu INSTALLED_APPS.

Ashwathama Dec 01 2020 at 13:08

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

Muéstrame tu página client.urls.py, por favor.