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

如何在Django中从URL捕获多个数字ID参数?

如何在Django中从URL捕获多个值?

你需要捕获的是长度不固定的数字ID,且支持多个ID的场景,分两种常见情况处理:


情况1:从查询参数(URL中?后的多个id)获取

你给出的示例URL属于查询参数形式(?id=xxx&id=xxx),这种情况不需要修改路径规则,只需匹配基础路径即可,在视图中直接提取多个ID:

完善后的urlpatterns

urlpatterns = [
    path("", view=my_view),
    path("check/", view=check_view, name="check_view"),
]

视图中获取多个ID

Django的request.GET是类字典对象,需用getlist()方法获取同名的多个参数:

def check_view(request):
    # 获取所有id参数,返回字符串列表
    id_str_list = request.GET.getlist('id')
    # 可选:转成整数列表(过滤非数字项)
    id_list = [int(id_str) for id_str in id_str_list if id_str.isdigit()]
    # 后续业务逻辑处理
    ...

这种方式完全适配你给出的示例URL,支持任意数量的数字ID,无需正则表达式。


情况2:从路径参数(如/library/check/53/1234/)获取

如果希望把多个ID直接放在URL路径中,可通过正则路径或自定义路径转换器实现:

方法A:使用re_path正则匹配

用正则表达式匹配多个以斜杠分隔的数字ID:

from django.urls import path, re_path

urlpatterns = [
    path("", view=my_view),
    # 匹配 /check/123/ 、/check/123/456/ 格式,末尾斜杠可选
    re_path(r"^check/(?P<ids>(\d+/)*\d+)/?$", view=check_view, name="check_view"),
]

视图中处理捕获的ID

def check_view(request, ids):
    # 分割字符串得到单个ID,转成整数列表
    id_list = [int(id_str) for id_str in ids.split('/') if id_str.isdigit()]
    # 后续业务逻辑处理
    ...

方法B:自定义路径转换器(更优雅)

  1. 在项目urls.py所在目录创建converters.py:
class MultipleIntConverter:
    regex = r'\d+(?:/\d+)*'

    def to_python(self, value):
        # 将路径字符串转为整数列表
        return [int(id_str) for id_str in value.split('/') if id_str.isdigit()]

    def to_url(self, value):
        # 将整数列表转回URL路径字符串
        return '/'.join(str(id_num) for id_num in value)
  1. 在urls.py中注册并使用转换器:
from django.urls import path, register_converter
from .converters import MultipleIntConverter

# 注册自定义转换器
register_converter(MultipleIntConverter, 'multi_int')

urlpatterns = [
    path("", view=my_view),
    # 使用转换器匹配多个数字ID
    path("check/<multi_int:ids>/", view=check_view, name="check_view"),
]
  1. 视图中直接接收整数列表:
def check_view(request, ids):
    # ids已经是处理好的整数列表,直接使用即可
    ...

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 23:24:33