Django urlpatterns, включающие / в задней части

Я студент, изучающий Django.

У меня есть вопрос, и я был бы признателен, если бы кто-нибудь помог мне.

Когда я перехожу по адресу 127.0.0.1:8000/feeds/1, он правильно отображает фид с идентификатором 1.

Однако при переходе по адресу 127.0.0.1:8000/reviews/1 я сталкиваюсь с проблемой, и получаю следующую ошибку: страница не найдена

Эту проблему можно решить, добавив косую черту в разделе пути к файлу reviews/urls.py, как это показано ниже: "int:review_id/".

Мой вопрос: почему URL фидов работает без косой черты в urlpatterns, а для обзоров я должен включить косую черту, чтобы он работал?

здесь находится основной urls.py

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

urlpatterns = [
    path("admin/", admin.site.urls),
    path("feeds/", include('feeds.urls')),
    path("users/", include('users.urls')),
    path("reviews/",include('reviews.urls'))
    # path("boards/", include('boards.urls'))
]
# feeds/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path("", views.Feeds.as_view()), 
    path("<int:feed_id>",views.FeedDetail.as_view()) 
]
# reviews/urls.py

from django.urls import path
from . import views

urlpatterns = [
    path("", views.Reviews.as_view()),
    path("<int:review_id>/", views.ReviewDetail.as_view())
]

Ответ находится прямо перед вами. Из вашего кода:

path(
    "<int:feed_id>",    # <-- Notice no trailing '/'
    views.FeedDetail.as_view()) 

path(
    "<int:review_id>/", # <-- Notice trailing '/'
    views.ReviewDetail.as_view()) 

Или, другими словами, если вы поместили '/' в конце объявления пути, '/' должно быть там же, когда вы вводите свой URL.

Вы не включили косую черту в:

path("<int:feed_id>",views.FeedDetail.as_view())

но вы сделали это в:

path("<int:review_id>/", views.ReviewDetail.as_view())

Предыстория: Когда пользователь запрашивает страницу, Django перебирает все шаблоны URL по порядку и останавливается на первом, который соответствует запрашиваемому URL, сопоставляя его с path_info. Как только один из шаблонов URL совпадает, Django импортирует и вызывает данное представление, которое представляет собой функцию Python (или представление на основе класса). Важно отметить, что URL, запрашиваемый пользователем, должен совпадать с URL, заданным в списке urlpatterns (включая косые черты).

Кроме того, я посоветую вам включить параметр name в ваши urlpatterns. Параметр name в шаблонах URL используется для присвоения уникального имени каждому URL. Он позволяет вам ссылаться на URL по его имени вместо того, чтобы жестко кодировать URL в коде. Это облегчает поддержку и обновление URL в проекте. См. https://docs.djangoproject.com/en/5.0/topics/http/urls/#reverse-resolution-of-urls

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