В чем разница между URL со слэшем на конце и без него в Django?

Ответ

Ключевое различие заключается в настройке Django APPEND_SLASH, которая по умолчанию установлена в True.

Когда APPEND_SLASH = True:

  1. Если пользователь запрашивает URL без слэша на конце (например, /articles), а в urls.py определен шаблон со слэшем (path('articles/', ...)), Django автоматически выполнит 301 редирект на /articles/.
  2. Это сделано для обеспечения каноничности URL, чтобы поисковые системы не индексировали одну и ту же страницу по двум разным адресам.

Пример (urls.py):

from django.urls import path
from . import views

urlpatterns = [
    # Шаблон определен со слэшем
    path('articles/', views.article_list, name='article-list'),
]
  • Запрос на /articles301 Redirect на /articles/
  • Запрос на /articles/200 OK

Если установить APPEND_SLASH = False в settings.py, то при запросе на /articles будет возвращена ошибка 404 Not Found.