将表单信息存储在Jinja框架中

时间:2018-07-17 20:44:30

标签: html web flask web-applications jinja2

我正在使用python flask框架开发产品推荐系统。

现在,此display_recommendations.html将显示该算法从数据库中选择的“最佳” 10种产品。在用户通过选中html表单中的复选框做出选择之后,我希望我可以在该html模板中存储一个变量,然后将其传递给submit_choices(),当用户单击“提交我的选择并播放时,该事件处理程序再来一轮!”按钮

submit_choices()函数随后将进行数据库更新(调整置信度得分,更新用户首选项等)

{% extends 'layout.html' %}

{% block body %}
<h1> Welcome {{session.username}}! </h1>
<h4>You can select the pillows you like and the ones you don't, after that, hit submit, or return to dashboard</h4>
<hr>
<form action="" method="post">
<table class="table table-striped">
<tr>
<th>ID</th>
<th>Price</th>
<th>Image</th>
<th></th>
<th></th>

</tr>
{% set likes = '100' %}
<!-- {% set nopes = [] %} -->
{% for pic in pictures %}
  <tr>
    <td>{{pic.idx}}</td>
    <td>{{pic.price}}</td>
    <td><img src = {{pic.img}} width = "350"></td>

    <td>
      <!-- <form action="" method="post"> -->
        <input type="checkbox" id="like" class="btn btn-success" name = "like" class="form-control" value= {{pic.idx}}>
        <label for="like">I like it!</label>
      <!-- </form> -->
    </td>


    <td>
      <!-- <form action="" method="post"> -->
        <input type="checkbox" id="nope" class="btn btn-danger"  name = "nope" class="form-control" value={{pic.idx}}>
        <label for="nope">Nope</label>
      <!-- </form> -->
    </td>


  </tr>
{% endfor %}

</table>
</form>

<form action="{{url_for('submit_choices',choices= [likes,nopes])}}">
<input type="submit" value="Submit my choices and Play Another Round!" class="btn btn-danger">

</form>

{% endblock %}

2 个答案:

答案 0 :(得分:0)

您需要以1种形式放置复选框并提交按钮:

<form>
    <input type="checkbox">
    <input type="checkbox"> 
    <input type="submit">
</form>

答案 1 :(得分:0)

首先,您必须执行@lciamp所说的。对于Jinja2部分,我将<form action="{{url_for('submit_choices',choices= [likes,nopes])}}">替换为<form action="https://[rest of URL]/[abc]" method="post">

<label for="like">I like it!</label>需要更改,like仅可用于一个(它们必须唯一,因为这是服务器检查每个字段的方式)。

然后,假设submit_choices()是服务器上的Python语言,则应添加一个@app.route装饰器。

示例([abc]是您在顶部写下的内容)

@app.route('/[abc]', methods=['POST'])
def submit_choices():
    #Whatever you put here
    #To access the form data use:
    request.values.get('[whatever comes after the "for" in the label]')

如有任何疑问,请参见here

希望我能帮上忙。