python - 使用 Flask 将表单中的输入行作为对象发布?

标签 python html flask

我有这个表格form其中每一行代表一个填充有输入的对象。

这是表单的片段:

<form>
<li>
    <select name="network[][layer_type]"><!-- options here --></select>
    <input type="number" name="network[][num_filters]">
    <!-- other parameters here -->
</li>
<li>
    <select name="network[][layer_type]"><!-- options here --></select>
    <input type="number" name="network[][pool_size]">
    <!-- other parameters here -->
</li>
<li>
    <select name="network[][layer_type]"><!-- options here --></select>
    <input type="number" name="network[][num_filters]">
    <!-- other parameters here -->
</li>
</form>

提交时,我希望输出字典如下所示:

{
"network":[
    {"layer_type": "conv2d", "num_filters": 16, "kernel_size": 2, "padding": "valid", "stride": 2},
    {"layer_type": "max_pool2d", "num_filters": 16, "kernel_size": 2, "padding": "valid", "stride": 2},
    {"layer_type": "conv2d", "num_filters": 32, "kernel_size": 3, "padding": "valid", "stride": 2}       
  ]
}

使用 request.form.getlist('network[]') 返回 []。如何使用 Flask 获取输出字典?

最佳答案

对于 Flask 以及代码和模板之间的关系似乎存在根本性的误解。首先,如果不使用 Jinja(Flask 标准)或其他一些工具,就无法将代码放入 HTML 模板中。使用 Jinja,您可以使用 {{variable}} 将变量添加到 HTML 模板中,并使用 {% for item in list %} HTML to loop {% endfor%} 将有限逻辑添加到模板中。有关 Jinja 约定的更多信息 herehere

假设您希望用户使用您的选择和输入来设置图层类型和过滤器数量,并且其他详细信息以类似的方式设置,您将希望您的模板如下所示:

<form>
<li>
    <select name="net1_layer_type_1"><!-- options here --></select>
    <input type="number" name="net1_num_filters_1">
    <!-- other parameters here -->
</li>
<li>
    <select name="net1_layer_type_2"><!-- options here --></select>
    <input type="number" name="net1_num_filters_2">
    <!-- other parameters here -->
</li>
<li>
    <select name="net1_layer_type_3"><!-- options here --></select>
    <input type="number" name="net1_num_filters_3">
    <!-- other parameters here -->
</li>
</form>

然后在相应的 flask route ,您可以像这样构建这个字典:

networks = {}
networks['network'] = []
networks['network'][0] = {'layer_type': request.form['net1_layer_type_1'], 'num_filters': request.form['net1_num_filters_1'], "kernel_size": 2, "padding": "valid", "stride": 2}

对其他项目重复此操作。

以此为基础,我确信您可以看到如何使其更加动态,允许具有附加成员的附加网络,并使用循环来创建每个网络成员。假设您想要创建 4 个网络,每个网络有 5 个成员,在呈现表单的路由上,您创建列表“network_count”和“member_count”,它们看起来像 [1,2,3,4] 和 [1,2, 3,4,5],分别。然后在您的模板上使用循环来构建如下所示的表单:

<form>
    {% for net in network_count %}
        {% for mem in member_count %}
            <li>
                <select name="net{{net}}_layer_type_{{member}}"><!-- options here --></select>
                <input type="number" name="net{{net}}_num_filters_{{member}}">
                <!-- other parameters here -->
            </li>
        {% endfor %}
    {% endfor %}
</form>

使用与之前相同的 python 来处理,但也循环它。

关于python - 使用 Flask 将表单中的输入行作为对象发布?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49374730/

相关文章:

html - 定位:after pseudoelement

Python Flask Docker 迁移

python - 如何在提取部分后删除某个字符,使用python

python - 如何在pandas中绘制图形计数表

python - 有条件地分配 DataFrame 中另一列的值

python - 读取静态文件夹中的 .json 文件

python - 导入错误 : No module named types

python - Flask Babel - 'translations/de/LC_MESSAGES/messages.po' 被标记为模糊,跳过

jquery - css 旋转和对齐

javascript - 我如何在 jquery 的帮助下在 codeigniter 中匹配两个电子邮件地址