Ответ 1
Одна из основных философий Djangos - URL должны быть красивыми.
Таким образом, некоторые URL-адреса, такие как accounts/detail?name='abc'
должны отображаться как accounts/detail/abc/
. Вы можете захватить его с помощью регулярных выражений в ваших конфигурациях URL. Здесь URL довольно аккуратный и удобный для пользователя. Это поможет поисковым системам правильно проиндексировать ваши страницы (теперь вы можете забыть о rel=canonical
) и поможет в SEO.
Теперь причину косой черты рассмотрим представление (в любой about.html
), которое относительно разрешает about.html
для пользователя по пути users/awesomeUser
так как users/awesomeUser
и users/awesomeUser/
отличаются,
-
Если пользователь находится в
users/awesomeUser
, браузер разрешит его какusers/about.html
потому что нет косой черты, которая нам не нужна -
Если пользователь находится в
users/awesomeUser/
, браузер разрешит его какusers/awesomeUser/about.html
потому что есть косая черта
child
отношению кfamily/parent/
являетсяfamily/parent/child
.child
отношению кfamily/parent
- этоfamily/child
.
Философия дизайна Django на "Определенных URL" гласит:
Технически, foo.com/bar и foo.com/bar/ - это два разных URL-адреса, и роботы поисковых систем (и некоторые инструменты анализа веб-трафика) будут рассматривать их как отдельные страницы. Django должен приложить усилия для "нормализации" URL, чтобы роботы поисковых систем не запутались.
Это обоснование настройки APPEND_SLASH. (APPEND_SLASH позволяет принудительно добавлять косые черты в URL)
Все еще не убежден?
- Поскольку django рассматривает оба URL как разные, если вы кэшируете свое приложение, Django сохранит две копии для одной и той же страницы в
user/awesomeUser
иuser/awesomeUser/
. - У вас должны быть проблемы с методами HTTP, отличными от GET, если вы не добавляете косую черту в URL (если вы когда-либо планируете создать REST API).
Обновить
Вы не можете заставить методы POST/PUT/PATCH/DELETE работать с rest_framework
если вы явно не определили APPEND_SLASH=False
в настройках и trailing_slash=False
для каждого маршрутизатора, который вы должны использовать (если вы используете Routers). Как будто ты в основном пропустишь это большую часть времени, и тебе придется потратить кучу времени на отладку этого. Джанго рекомендует append slashes
и не заставляет их.
Это до разработчика, чтобы добавить косые черты или нет.