我正在使用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 %}
答案 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。
希望我能帮上忙。