1

所以我有一个 sqlite db 文件,我使用 python 脚本生成该文件,我正在读取该文件以将信息呈现给 Flask 端点。

端点解析数据库中的项目并生成我随后传递给 Jinja 模板的 dict 对象:

@app.route('/endpoint', method=['GET', 'POST'])
def someFunction:
    << generate finalDict via db queries >>
    return render_template('whatever.html', **"finalDict": finalDict})

whatever.html然后呈现一个引导表,即

<table>
   <tr>
      <th>
         Header 1
      </th>
      ...
   </tr>
   <tr>
     <td>
        {{ finalDict['someitem'] }}
     </td>
     ...
   </tr>
</table>

到目前为止,一切都很好,一切都呈现出我希望的样子。

我想要做的是在我的表中有最后一列,其中包含一个下拉菜单,允许用户对该行中的项目进行分类。

因此,如果该行看起来像ID | name | whatever,它将有一个 final| [dropdown]允许用户选择一个分类,这将始终是三种可能性之一。

我真正想知道如何构建 HTML,并且大概是if request.method == 'POST':端点中的一个捕获,以根据需要更新数据库。

是否可以将整个表视为一个form对象,然后在用户使用上述捕获单击提交按钮后对其进行解析?

如果不是,那么考虑到我在这里要做的事情,构建事物的最佳方式是什么?

4

1 回答 1

2

我真正想知道如何构建 HTML

您将希望使用 3 个选项进行简单的 HTML 选择:

<form name="category_form" id="category_form" action="/endpoint">
    <select name='category' id='category'>
        <option value='1'>Option 1</option>
        <option value='2'>Option 2</option>
        <option value='3'>Option 3</option>
    </select>
</form>

然后在选择下拉列表时使用 ajax POST 到您的端点。例如,使用 jQuery:

$(document).ready( function() {
    var form = $('#category_form');

    form.find('#category').change(function(){
        $.ajax({
            type: "POST",
            url: form.attr('action'),
            data: form.serialize(),
            success: function(response) {
                //optionally do something
            }
        });
    });
});

据推测,如果 request.method == 'POST': 在端点中捕获以适当地更新数据库。

这正是你的做法:-)

if request.method == 'POST':
    data = request.form
    #do something with data

data将是您提交到端点的表单中的数据。

查看有关请求对象的文档以及如何使用它。

于 2013-07-31T06:39:02.353 回答