首页 > 解决方案 > Django - 如何将 URL 模式正则表达式与附加参数匹配?

问题描述

我的 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

现在我的实际问题是,urls.py 的正则表达式必须看起来如何才能接受第二个 URL 示例?

标签: djangoregexdjango-urls

解决方案


的用法已url()弃用。改为使用re_path()

鉴于这是您的网址:

http://localhost/stream/5409caac-fc9c-42b8-90af-058eff65a156?st=zD3H0cHJrbcUAHZPNbPGyg&e=1630915404

我假设额外的参数具体是:

?st=zD3H0cHJrbcUAHZPNbPGyg&e=1630915404

从字符开始的所有字符串?已经是查询字符串参数的一部分。在 Django 中,URL 模式匹配只针对实际路径,不包括查询字符串。这记录在这里

URLconf 搜索的内容

URLconf 搜索请求的 URL,作为一个普通的 Python 字符串。这不包括 GET 或 POST 参数或域名。

例如,在对 的请求中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在接收视图中访问。


推荐阅读