Django - как сопоставить шаблон URL regex с дополнительными параметрами?
У меня есть следующая конечная точка в моем urls.py
url(r'^stream/(?P<pk>[0-9a-f-]+)$', App_Views.stream, name='stream'),
Это означает, что при вызове конечная точка будет выглядеть следующим образом:
http://localhost/stream/5409caac-fc9c-42b8-90af-058eff65a156
Теперь я добавляю несколько дополнительных параметров в URL перед вызовом, чтобы это выглядело следующим образом:
http://localhost/stream/5409caac-fc9c-42b8-90af-058eff65a156?st=zD3H0cHJrbcUAHZPNbPGyg&e=1630915404
Теперь перейдем к моему вопросу, как должен выглядеть regex в urls.py, чтобы принять второй пример URL? Уже разбираюсь с этим 2 дня и не смог найти решение.
Заранее спасибо
Использование url()
уже устарело. Вместо этого используйте re_path()
.
Учитывая, что это ваш URL:
http://localhost/stream/5409caac-fc9c-42b8-90af-058eff65a156?st=zD3H0cHJrbcUAHZPNbPGyg&e=1630915404
Я предполагаю, что дополнительные параметры конкретно:
?st=zD3H0cHJrbcUAHZPNbPGyg&e=1630915404
Вся строка, начинающаяся с символа ?
, уже является частью параметров строки запроса . В Django сопоставление шаблонов URL происходит только для фактического пути, не включая строку запроса. Это документировано здесь:
По чему ищет URLconf
URLconf ищет по запрошенному URL, как обычная строка Python строка. Сюда не входят параметры GET или POST, а также доменное имя.
Например, в запросе на , URLconf будет искать
https://www.example.com/myapp/
. URLconf будет искатьmyapp/
.В запросе к
https://www.example.com/myapp/?page=3
, URLconf будет искатьmyapp/
.URLconf не смотрит на метод запроса. Другими словами, все методы запроса - POST, GET, HEAD и т.д. - будут направлены в одну и ту же функции для одного и того же URL.
Так что это должно работать:
re_path(r'^stream/(?P<pk>[0-9a-f-]+)$', App_Views.stream, name='stream'),
Если вам нужно получить доступ к значениям строки запроса, обратитесь к request.GET
внутри принимающего представления.