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 внутри принимающего представления.

Вернуться на верх