Django добавляет слеш в динамический сегмент URL
У меня динамический url настроен следующим образом:
path('segment/', func1, name='func1'),
path('segment/<str:string>/', string, name='string'),
Однако когда я перехожу к https://example.com/segment/watch?v=nTeq0U_V15U
(watch?v=nTeq0U_V15U
- это строка), в середине автоматически добавляется косая черта, в результате чего получается https://example.com/segment/watch/?v=nTeq0U_V15U/
. Интересно, что при этом не возникает ошибка 404, хотя у меня нет шаблона URL с 3 сегментами в urls.py
. Однако мой вопрос заключается в том, почему добавляется косая черта и как этого избежать?
Однако меня интересует, почему добавляется слэш и как этого избежать?
Из-за настройки APPEND_SLASH
[Django-doc], которая по умолчанию установлена на True
.
Это позволит, если для заданного пути не найдено совпадений, и путь не заканчивается слешем, сделать переадресацию на путь со слешем, так что браузер попытается получить страницу, заканчивающуюся слешем.
Но вопрос показывает некоторое непонимание. Действительно, если написать:
https://example.com/segment/watch?v=nTeq0U_V15U
\___ ______/\______ _____/\_____ ______/
v v v
hostname path querydict
тогда ?v=nTeq0U_V15U
является не частью path, а частью querydict, поэтому он не совпадет с <str:string>
, а только с <<<11>>
Таким образом, вы получаете, что в вашем представлении это выглядит так:
def string(request, string):
# string will be 'watch'
print(request.GET['v']) # nTeq0U_V15U
# …