【问题标题】:Grouping HTML Input Fields in Flask在 Flask 中对 HTML 输入字段进行分组
【发布时间】:2013-10-06 17:23:21
【问题描述】:

我有一个 HTML 表单,可以接受任意数量的书籍及其作者。我正在尝试对相应的书籍和作者进行分组,以便在用户提交表单时服务器可以轻松地对其进行解析。我尝试使用 HTML 字段集,但我不确定这是否是正确的方法。

当我将表单提交到服务器时,Flask 的 request.form 中没有字段集的概念

这是 HTML 表单:

<form action="/save/" method="POST">

    <fieldset>
        <input name="author" value="Mark Twain" class="author" type="text">
        <input name="book" value="The Adventures of Tom Sawyer" class="book" type="text">        
    </fieldset>

    <fieldset>
        <input name="author" value="Henry David Thoreau" class="author" type="text">
        <input name="book" value="Civil Disobedience" class="book" type="text">        
    </fieldset>

    <!--More books and authors here possibly-->

    <button type="submit">Save</button>

</form>

这是我登录request.form时在服务器上看到的:

ImmutableMultiDict([('book', u'The Adventures of Tom Sawyer'), ('book', u'Civil Disobedience'), ('author', u'Mark Twain'), ('author', u'Henry David Thoreau')])

您可以看到服务器接收到的数据没有任何类型的字段集或分组的概念。

有没有更好的方法将各个书籍与其相应的作者分组?我更愿意在 HTML 中完成所有这些操作,而不是使用 jQuery/JSON/AJAX。

【问题讨论】:

    标签: python html forms flask


    【解决方案1】:

    不,很遗憾,这是不可能的。为字段提交的唯一数据是其名称和值。虽然 Flask 处理表单数据的方式(名称不影响处理)通常比 PHP 中的更好(其中 author[some_id] 之类的名称会创建一个数组),但这是您需要手动处理的少数情况之一。

    最简单的方法是使用 author-IDtitle-ID 之类的名称,然后遍历字段,从键中提取 ID 和实际名称。

    【讨论】:

    • 您对我如何在服务器看到书籍时维护书籍的顺序有什么建议吗?我可以使用您建议的方法,但是当我记录 request.form 时,书籍/作者的顺序没有得到维护。
    • 你不能。数据存储在 MultiDict 中,并且与所有 dicts 一样,它们不保留顺序。无论如何,依赖字段顺序并不是一个好主意。
    • 实际上@Raj 可以保留订单,您只需使用ImmutableOrderedMultiDict 作为request_class 的后备存储。更多详情请见this answer
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-09-18
    • 1970-01-01
    • 2011-01-15
    • 2017-11-13
    • 2017-02-14
    相关资源
    最近更新 更多