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

如何使用jQuery结合window.location将列表传递至Django视图函数

前端JS逻辑修正

原代码存在三个硬错误:

  • window.location是浏览器内置对象,不是可调用函数,直接调用会抛出类型错误,页面跳转需要给它的href属性赋值
  • 存在函数名笔误,将getValues2()错写为getValues?()
  • 直接把返回的列表拼接到路径字符串中,既不符合URL规范,也无法被Django默认路由解析

修正后的标准实现如下,使用URLSearchParams自动处理参数转义,避免手动拼接的格式问题:

let getValues2 = () => $("input[name='checkb']:checked").map((i,el) => el.id.trim()).get();
const checkedValueList = getValues2();
console.log('getValues2 ', checkedValueList);

// 构造符合规范的GET查询参数
const queryParams = new URLSearchParams();
// 遍历列表,将每个值绑定到同一个参数名上,匹配后端批量取参的逻辑
checkedValueList.forEach(item => queryParams.append('checked_ids', item));

// 按项目实际配置的路由调整跳转路径,开头加斜杠避免相对路径解析错误
window.location.href = `/eprint/checked?${queryParams.toString()}`;
Django视图取参实现

因为前端是通过GET请求的同名参数传递列表,Django需要使用getlist()方法批量获取同key的参数值。如果直接用get()方法取值,只会拿到列表的第一个元素,不符合业务需求。修正后的视图代码:

def eprint(request):
    print('eprint')
    # 传入和前端一致的参数名,设置默认空列表兜底,避免无传参时抛出异常
    checked = request.GET.getlist('checked_ids')
    print(checked)
常见注意事项
  • 不推荐将列表拼接为a,b,c格式直接嵌入路径段,这种方式需要在Django路由中自定义正则匹配规则,再手动对字符串做切割转换,开发成本远高于标准GET参数传递
  • 列表值如果包含中文、空格等特殊字符,必须使用URLSearchParams做自动转义,不要手动拼接参数字符串,否则会出现参数解析失败的问题
  • 跳转路径开头的斜杠不要省略,否则会基于当前页面的相对路径做跳转,容易出现和实际路由不匹配的404问题

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.23 20:54:05