You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django中如何从urlpatterns获取URL变量值并传递到视图函数

Django路由匹配传递URL参数问题解决方案

问题根因

你当前拿到空值的核心原因是:re_path的正则表达式没有设置命名捕获组,Django只会将正则中捕获的内容作为参数传递给视图函数,你现有的正则只有匹配逻辑,没有捕获规则,所以视图的url参数始终读取默认空值。

修复步骤

1. 修改路由正则

给你要捕获的URL部分添加命名捕获组(?P<url>正则规则),代码修改如下:

from django.urls import path, re_path
from . import views

urlpatterns = [
    path('', views.index),
    # 命名捕获组将匹配到的URL内容赋值给url参数传给视图
    # ^匹配路径开头,/?$允许结尾可选带/兼容Django默认尾斜杠逻辑
    re_path(r'^(?P<url>https?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)/?$', views.index_traductor),
]

如果你需要匹配的路径是/url=https://xxx的格式,将正则调整为:

re_path(r'^url=(?P<url>https?://(?:[a-zA-Z]|[0-9]|[$-_@.&+]|[!*\(\),]|(?:%[0-9a-fA-F][0-9a-fA-F]))+)/?$', views.index_traductor),

2. 特殊场景兼容说明

  • 如果匹配时遇到尾斜杠自动跳转问题,可以在settings.py中添加配置APPEND_SLASH = False关闭自动补全尾斜杠逻辑
  • 该路径匹配方式无法处理目标URL带查询参数的场景:路径中的?会被Django识别为查询参数分隔符,后续内容不会被捕获到url参数中。如果需要支持带查询参数的目标URL,更稳妥的实现方式是将目标URL做URL编码后放在请求查询参数中,比如访问地址为https://place.com/traductor?target_url=https%3A%2F%2Fwww.google.es%2Fsearch%3Fq%3Dtest,此时不需要配置复杂正则,在视图中直接通过request.GET.get('target_url')就能拿到完整的目标地址。

内容的提问来源于stack exchange,提问作者Javi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 16:06:05