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

通过POST向Django发送文本数组,无法获取为数组仅得到字符串

问题与解决方案

问题详情

我从多个CKEditor获取文本组成数组,前端通过以下代码发送请求给Django:

chk_vals = ["Some text","Other text"];
const data = new URLSearchParams();
data.append("csrfmiddlewaretoken", "{{csrf_token}}");
data.append("tmplData", JSON.stringify(chk_vals));

fetch(uri, {
        method: 'post',
        body: data,
    })
    .then(response => response.json())
    .then(data => {
        // 后续处理逻辑
    });

Chrome网络请求显示tmplData的参数值是["Some text","Other text"]。

后端Django处理代码:

data = request.POST
templateArr = data.getlist('tmplData')
templateList = list(templateArr)

但实际得到的templateList长度为1,是整个JSON格式的字符串;而且文本里可能包含逗号,没法用拆分的方式转成数组。试过用data.getlist('tmplData[]'),或者不做JSON.stringify直接发送数组,结果templateArr为空,问题依旧。


两种可行解决方案

方案1:后端解析JSON字符串

前端已经把数组序列化为JSON字符串,后端直接取出该字符串并解析成数组即可,不用getlist:

import json

data = request.POST
# 获取前端传来的JSON字符串
template_json_str = data.get('tmplData')
# 解析为Python列表
templateList = json.loads(template_json_str)

这种方法能完美保留原始文本内容,不受逗号等特殊字符影响。

方案2:前端调整数组传递方式

如果想让后端用getlist直接拿到数组,前端需要遍历数组,逐个将元素添加到URLSearchParams中:

chk_vals = ["Some text","Other text"];
const data = new URLSearchParams();
data.append("csrfmiddlewaretoken", "{{csrf_token}}");
// 遍历数组,每个元素单独append
chk_vals.forEach(text => {
    data.append("tmplData", text);
});

fetch(uri, {
        method: 'post',
        body: data,
    })
    .then(response => response.json())
    .then(data => {
        // 后续处理逻辑
    });

此时后端用data.getlist('tmplData')就能拿到长度为2的列表,每个元素对应CKEditor的文本内容。

注意:不要直接把数组传给append,URLSearchParams会把数组转成逗号分隔的字符串,后端依旧拿不到数组结构,必须逐个添加元素。

内容的提问来源于stack exchange,提问作者Habbo's Dreams

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.17 06:44:58