如何在Django中结合正则URL模式与URL转换器?
Django中re_path实现类似path转换器的参数传递方法
要让re_path能像path那样传递site_url参数给视图,核心是在正则表达式中定义命名捕获组——这是re_path传递参数的唯一方式,而path的转换器本质是帮你自动生成了命名捕获组的正则。
具体操作步骤:
- 修改你的
internal_site_url正则,将需要传递给视图的路径部分用(?P<site_url>正则规则)的格式包裹,其中site_url是要传给视图的参数名,和你在external_site视图中使用的参数名保持一致。 - 确保
internal_site视图函数接收site_url参数,参数名必须和正则里的命名捕获组名称完全匹配。
示例代码:
假设你原本的internal_site_url是匹配以internal/开头的内部站点路径,修改后的配置如下:
# 定义带命名捕获组的正则 internal_site_url = r'^internal/(?P<site_url>.*)$' urlpatterns = [ re_path(internal_site_url, internal_site), # 现在会把internal/后面的路径以site_url参数传给视图 path('<path:site_url>', external_site), # 保持原配置不变 ]
如果你的内部站点需要匹配整个路径作为site_url(比如类似path的<path:site_url>匹配任意路径),可以直接把整个正则放在命名捕获组中:
internal_site_url = r'^(?P<site_url>internal/.*)$'
注意:命名捕获组的名称必须和视图接收的参数名完全一致,否则视图会无法获取到对应参数。
内容的提问来源于stack exchange,提问作者Dimon Agon
相关产品推荐
相关产品推荐

