Jak zaimportować adresy URL z aplikacji w głównym pliku adresów URL django

Dec 01 2020

Mam następującą strukturę projektu.

To jest moja tablica INSTALLED_APPS.

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'climemanage.clients'
]

Następnie próbowałem dodać clients.urlsplik w urlspliku nadrzędnym , jak poniżej.

from django.contrib import admin
from django.urls import include, path

urlpatterns = [
    path('admin/', admin.site.urls),
    path('clients/', include('clients.urls'))
]

Ale otrzymuję ten błąd. ModuleNotFoundError: No module named 'clients'

Mogę rozwiązać ten problem, korzystając z następującej ścieżki. include('climemanage.clients.urls')ale chcę przeskoczyć climemanageze ścieżki.

Próbowałem różnych sposobów,

import clients
import climemanage.clients
from climemanage import clients

Ale nic nie działa.

Odpowiedzi

1 ha-neul Dec 01 2020 at 13:51

Twoja struktura projektu jest nieprawidłowa. Wygląda na to, że startprojectczęść lub startappczęść mogą pójść nie tak. Najlepiej byłoby, gdybyś mógł wymienić, jak doszedłeś do tego momentu. Proszę zobaczyć strukturę, którą umieściłem na końcu mojej odpowiedzi.

W twoim przypadku twój główny settings.pyjest poniżej clients. Oznacza to, że clientsjest to wynik startproject. Obecnie nie masz pliku app, ale masz kilka plików, które powinny pojawić się z apptym teraz w migrationsfolderze.

Z tego powodu nigdy nie będziesz w stanie nic dodać z clients.urlsdo main urls.py. Ponieważ twoje clientsjest miejscem, w którym znajduje się twoja główna urls.py.

Tutaj umieszczam to, co normalnie robię (ta wersja na Maca, jeśli używasz Windowsa, musisz sprawdzić tutorial 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

następnie po uruchomieniu startprojectpolecenia upewnij się, że działa jak poniżej:

django-admin startproject project .

Zwróć uwagę .na koniec.

Następnie powinieneś mieć strukturę taką jak:

clienmanage
|--- manage.py
|--- project
|   |--- __init__.py
|   |--- settings.py
|   |--- urls.py
|   |--- wsgi.py
|--- virtual
|
|___ requirements.txt

wtedy będziesz:

$ 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

Po tym kroku django nie będzie automatycznie generować apppoziomów urls.pyi forms.py. Powinieneś wygenerować te pliki w appfolderze (w moim przypadku clients)

**** Jeśli chcesz umieścić aplikację w innym katalogu, możesz określić miejsce docelowe.

$ python manage.py startapp <app_label> [destination] 

w powyższym przypadku, jeśli chcesz mieć swoje appwnętrzeproject

$ python manage.py startapp clients project/clients

Jeśli wybrałeś tę trasę, pamiętaj, aby dodać, project.clientsa nie clientsw swoim INSTALLED_APPS.

Ashwathama Dec 01 2020 at 13:08

W głównym pliku urls.py możesz dodać następujący fragment kodu.

from django.urls import path, include 

urlpatterns = [
    path('admin/', admin.site.urls),
    path('something/', include('clients.urls')),
]

W pliku 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

Pokaż mi swoją stronę client.urls.py, proszę.