Ответ
Ключевое различие заключается в настройке Django APPEND_SLASH
, которая по умолчанию установлена в True
.
Когда APPEND_SLASH = True
:
- Если пользователь запрашивает URL без слэша на конце (например,
/articles
), а вurls.py
определен шаблон со слэшем (path('articles/', ...)
), Django автоматически выполнит 301 редирект на/articles/
. - Это сделано для обеспечения каноничности URL, чтобы поисковые системы не индексировали одну и ту же страницу по двум разным адресам.
Пример (urls.py
):
from django.urls import path
from . import views
urlpatterns = [
# Шаблон определен со слэшем
path('articles/', views.article_list, name='article-list'),
]
- Запрос на
/articles
→ 301 Redirect на/articles/
- Запрос на
/articles/
→ 200 OK
Если установить APPEND_SLASH = False
в settings.py
, то при запросе на /articles
будет возвращена ошибка 404 Not Found.