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

如何通过Nunjucks渲染的表单直接生成键值对提交数据?

解决方法:前端动态构造目标JSON提交

你想要直接得到{ attr_1: 'value_1', attr_2: 'value_2' }这样的提交结构,不需要后端额外解析,最直接的方式是在表单提交前用JavaScript动态整理数据,构造符合要求的JSON再发送。

步骤1:调整Nunjucks模板,给表单元素添加标识类

先修改你的模板,给每个属性-值对的容器和输入框加上类名,方便JavaScript获取元素:

<form id="attr-form" method="post" action="/your-submit-url">
  {% for item in attr_val %}
    <div class="attr-value-group">
      <!-- 用于修改属性名的输入框 -->
      <input class="attr-key" type="text" value="{{ item.attr }}" placeholder="属性名">
      <!-- 用于修改属性值的输入框 -->
      <input class="attr-value" type="text" value="{{ item.value }}" placeholder="属性值">
    </div>
  {% endfor %}
  <button type="submit">提交修改</button>
</form>

步骤2:添加JavaScript处理表单提交

通过监听表单的提交事件,阻止默认的表单提交行为,手动整理数据成你想要的结构,再以JSON格式发送给后端:

// 获取表单元素
const attrForm = document.getElementById('attr-form');

attrForm.addEventListener('submit', function(e) {
  // 阻止默认的表单提交(避免以form-data格式发送)
  e.preventDefault();

  // 初始化用于存储最终数据的对象
  const submitData = {};

  // 获取所有属性-值对的容器
  const attrGroups = document.querySelectorAll('.attr-value-group');
  
  attrGroups.forEach(group => {
    // 获取当前组的属性名和属性值
    const key = group.querySelector('.attr-key').value.trim();
    const value = group.querySelector('.attr-value').value.trim();

    // 只有当属性名不为空时才添加到提交数据中
    if (key) {
      submitData[key] = value;
    }
  });

  // 发送JSON格式的请求到后端
  fetch(this.action, {
    method: this.method,
    headers: {
      'Content-Type': 'application/json'
    },
    body: JSON.stringify(submitData)
  })
  .then(response => {
    // 处理后端响应,比如跳转或提示成功
    if (response.ok) {
      alert('修改提交成功!');
      // 可选:刷新页面或跳转到其他页面
      // window.location.reload();
    } else {
      throw new Error('提交失败');
    }
  })
  .catch(error => {
    console.error('提交出错:', error);
    alert('提交失败,请稍后重试');
  });
});

这样处理后,后端收到的请求体就是你期望的JSON结构,不需要再做任何解析,直接使用即可。

补充说明

如果你的后端框架支持解析嵌套的表单数据(比如Express的body-parser开启extended: true),也可以通过调整输入框的name属性来实现,但这种方式通常还是需要后端做一次数组转对象的处理。而上面的前端处理方式是最直接满足你“无需重新解析JSON”需求的方案。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 08:14:35