Как мне настроить мои Django urlpatterns в моем приложении (не проекте)

Допустим, у меня есть классическое приложение "Школа" в рамках моего проекта Django. Мой school/models.py содержит модели для student и course. Все файлы моего проекта находятся в каталоге, который я назвал config.

Как написать оператор(ы) include в config/urls.py, который(ые) ссылается(ются) на две отдельные конечные точки в school/urls.py? А потом что мне вставить в schools/urls.py?

Например, если бы я пытался определить конечную точку только для students, в config/urls.py я бы сделал что-то вроде этого:

from django.urls import path, include

urlpatterns = [
    ...
    path("students/", include("school.urls"), name="students"),
    ...
]

Затем в school/urls.py я бы сделал что-то вроде этого:

from django.urls import path
from peakbagger.views import StudentCreateView, StudentDetailView, StudentListView, StudentUpdateView, StudentDeleteView

urlpatterns = [
    # ...
    path("", StudentListView.as_view(), name="student-list"),
    path("add/", StudentCreateView.as_view(), name="student-add"),
    path("<int:pk>/", StudentDetailView.as_view(), name="student-detail"),
    path("<int:pk>/update/", StudentUpdateView.as_view(), name="student-update"),
    path("<int:pk>/delete/", StudentDeleteView.as_view(), name="student-delete"),
]

Но как мне добавить еще один urlpattern в config/urls.py по типу такого? Утверждение include нуждается в дополнительной информации/параметрах, нет?

from django.urls import path, include

urlpatterns = [
    ...
    path("students/", include("school.urls"), name="students"),
    path("courses/", include("school.urls"), name="courses"),
    ...
]

А что происходит внутри school/urls.py?

Я открыт для предложений, и определенно являюсь неофитом, когда дело доходит до философии Django. Нужен ли мне где-то дополнительный urls.py? Я бы предпочел не помещать все в config/urls.py и не создавать отдельное приложение для студентов и курсов.

Я бы предпочел создать два (или более) urls.py файла и затем указать их по отдельности.

# directory structure
school/
├── admin.py
├── apps.py
├── __init__.py
├── migrations
│   └── __init__.py
├── models.py
├── tests.py
├── urls
│   ├── course.py
│   ├── __init__.py
│   └── student.py
└── views.py


# school/urls/course.py
from django.urls import path
from school.views import CourseListView

urlpatterns = [
    path("", CourseListView.as_view(), name="course_list"),
    # other URLs
]



# school/urls/student.py
from django.urls import path
from school.views import StudentListView

urlpatterns = [
    path("", StudentListView.as_view(), name="student_list"),
    # other URLs
]


# config/urls.py
from django.urls import include, path

urlpatterns = [
    path("student/", include("school.urls.student")),
    path("course/", include("school.urls.course")),
    # other URLs
]

Лучшее решение для вас - сделать отдельный каталог urls внутри вашего приложения. Например, если у вас есть школа в качестве приложения, то app

├── School
│   ├── views.py
│   └── models.py
|   └── urls
|       └── __init__.py
|       └── urls.py
|       └── school_urls.py
|       └── course_urls.py

Теперь в вашем основном проекте urls можно задать таким образом

urlpatterns = [
    ...
    path("", include("school.urls"), name="students"),
    ...
]

а в urls.py из папки urls вашей школы вы можете сделать так

    urlpatterns = [
        ...
        path("students/", include("school.urls.school_urls"), name="students"),
 path("course/", include("school.urls.course_urls"), name="course"),
        ...
    ]

и вы можете добавить представление курса в папку url курса и другое представление студента в файл urls студента

Вернуться на верх