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

Django视图与模板间传递UUID字符串列表时仅返回首个值问题求助

问题根因

你遇到的问题由两个错误共同导致:

  • 模板中隐藏input的value属性未加双引号包裹:你序列化后的JSON字符串包含双引号、逗号等特殊字符,浏览器解析时会将第一个空格/特殊字符前的内容识别为完整value,导致只能拿到截断后的首个UUID片段
  • 取值逻辑不匹配:你将整个UUID列表序列化为单个JSON字符串存储在隐藏域,回传时是单个参数而非多个同名参数,使用request.GET.getlist()无法正确取值
修复步骤

1. 修改模板隐藏域代码

给value属性加上双引号,同时用Django内置的escape过滤器转义特殊字符,避免HTML解析异常:

<form action='to_option_1' method='GET'>
  <button type='submit'>Option 1</button>
  {% if uuid_selects %}
    <input type="hidden" value="{{ uuid_selects|escape }}" name="uuid_selects">
  {% endif %}
</form>

2. 修改视图取值逻辑

先获取单个JSON字符串参数,再反序列化为UUID列表:

import json

def to_option_1(request):
    option_1 = True
    uuid_selects = None
    # 取单个字符串参数而非用getlist
    uuid_selects_str = request.GET.get('uuid_selects')
    if uuid_selects_str:
        try:
            # 反序列化回列表
            uuid_selects = json.loads(uuid_selects_str)
        except json.JSONDecodeError:
            uuid_selects = None
    return team_landing_page(request,
                             uuid_selects = uuid_selects,
                             option_1 = True)
可选优化

如果UUID列表过长,GET请求会有参数长度限制,你可以选择将uuid_selects存在用户session中传递,无需通过前端表单隐藏域往返:

  • 存:request.session['uuid_selects'] = uuid_selects
  • 取:uuid_selects = request.session.get('uuid_selects')
  • 用完可以手动删除:del request.session['uuid_selects']

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 02:57:02