【问题标题】:sending multiple values from django dropdown从 django 下拉列表发送多个值
【发布时间】:2017-05-18 11:00:42
【问题描述】:

我有一个带有下拉菜单的 django 表单

<form action="/dir/" method="POST">{% csrf_token %}
    <table>
      <tr><td>
        <select name="listxblocks">
          {% for scname, desc in scenarios %}
          <!--<option value="{% url "workbench_show_scenario" scname %}">{{desc}}/{{scname}}</option>-->
          <option value="{{scname}}">{{desc}}/{{scname}}</option>

          {% endfor %}

        </select>

        </td>
    <td></td></tr>
    </table>
    <input type="submit" value="Save"/>
</form>

我目前在提交表单时传递了一个值 scname,我需要传递两个值 scnamedesc 并稍后访问它们

如何发送这两个值

【问题讨论】:

    标签: django


    【解决方案1】:

    希望它会起作用。您可以从option 传递一个JSON 字符串,并在django 视图中将json string 转换为json object

    <option value="{'desc': {{desc}}, 'scname': {{scname}} }">{{desc}}/{{scname}}</option>
    

    然后在你的 Django 视图函数中

    import json
    blocks = json.loads(request.POST.get('listxblocks'))
    desc = blocks['desc']
    scname = blocks['scname']
    

    【讨论】:

    • 这对注释很有帮助:json 应采用有效格式:&lt;option value='{"desc": "{{desc}}", "scname": "{{scname}}" }'&gt;{{desc}}/{{scname}}&lt;/option&gt;,块应为:blocks = json.loads(request.POST.get('option'))
    【解决方案2】:

    当我需要解压两个值时,我都用已知的分隔符写入:

    <option name value="{{desc}}#{{scname}}">{{desc}}/{{scname}}</option>
    

    那么在你看来:

    foo = request.POST.get('listxblocks').split('#')
    desc = foo[0]
    scname = foo[1]
    

    【讨论】:

    • 如果您在 descscname 中获得了 #,您将得到不正确的值。
    【解决方案3】:

    如果需要更简单的形式,也可以使用 json 数组:

    <option value='[ "{{desc}}", "{{scname}}" ]'>{{desc}}/{{scname}}</option>
    

    这将在 Python 中被序列化为一个列表:

    my_list = json.loads(request.POST.get('option'))
    print(my_list[0])
    print(my_list[1])
    

    【讨论】:

      猜你喜欢
      • 2021-05-07
      • 2017-06-08
      • 1970-01-01
      • 2018-12-16
      • 1970-01-01
      • 2018-02-03
      • 2019-12-22
      • 2021-09-07
      • 1970-01-01
      相关资源
      最近更新 更多