gpt4 book ai didi

javascript - Flask Dynamic 依赖下拉列表

转载 作者:太空狗 更新时间:2023-10-30 02:39:23 25 4
gpt4 key购买 nike

我开始阅读一些 flask 应用程序编程,我一直在尝试让下拉菜单工作,但到目前为止我没有运气。我想要做的是,当用户从第一个下拉列表中选择一种食物类型时,它应该从数据库中获取相应的列表并填充第二组下拉列表。我不知道如何让它在做出选择后发送快速请求。我真的不明白这里应该做什么。

<body>
<div>
<form action="{{ url_for('test') }}" method="POST">
<div>
<label>Food:</label>
<select id="food" name="food" width="600px">
<option SELECTED value='0'>Choose your fav food</option>
{% for x in food %}
<option value= '{{ x }}'>{{x}}</option>
{% endfor %}
</select>
<!-- After a selection is made, i want it to go back to the database and fectch the results for the below drop box based on above selection -->
</div>
<div>
<label>Choose Kind of Food:</label>
<select id="foodChoice" name="foodChoice" width="600px">
<option selected value='0'>Choose a kind</option>
{% for x in foodChoice %}
<option value= '{{ x }}'>{{x}}</option>
{% endfor %}
</select>
</div>
<div>
<input type="submit">
</div>
</form>
</div>

app.html

@app.route('/', method = ['GET', 'POST'])
def index():
foodList = [ i.type for i in db.session.query(FoodType)]
return render_template('main.html', food=foodList)

@app.route(/foodkind', method = ['GET', 'POST'])
def foodkind():
selection = request.form['foodChoice']
foodKind = [ i.kind for i in db.session.query(FoodType).filter(FoodKind == selection)]
return render_template('main.html', foodChoice = foodKind)

我看了很多问题,但还没有找到任何简单的问题可以帮助我。如果有人可以为我演示代码,以便我可以查看并从中学习,那就太好了。

最佳答案

您需要在此处使用 Ajax 来根据您选择的食物种类检索食物列表。因此,在您的模板中,您需要包含如下内容:

<html>
<head>

<script src="https://code.jquery.com/jquery-3.2.1.min.js"
integrity="sha256-hwg4gsxgFZhOsEEamdOYGBf13FyQuiTwlAQgxVSNgt4="
crossorigin="anonymous">
</script>

<script>
$(document).ready(function() {
$('#foodkind').change(function() {

var foodkind = $('#foodkind').val();

// Make Ajax Request and expect JSON-encoded data
$.getJSON(
'/get_food' + '/' + foodkind,
function(data) {

// Remove old options
$('#food').find('option').remove();

// Add new items
$.each(data, function(key, val) {
var option_item = '<option value="' + val + '">' + val + '</option>'
$('#food').append(option_item);
});
}
);
});
});
</script>
</head>

<body>
<form>
{{ form.foodkind() }}
{{ form.food() }}
</form>
</body>
</html>

此代码将对 JSON 编码数据进行速记 Ajax 请求。此数据包含您的食物选择框的值列表。

为此,您需要添加一个端点 /get_food/<foodkind>到你的 Flask View :

food = {
'fruit': ['apple', 'banana', 'cherry'],
'vegetables': ['onion', 'cucumber'],
'meat': ['sausage', 'beef'],
}


@app.route('/get_food/<foodkind>')
def get_food(foodkind):
if foodkind not in food:
return jsonify([])
else:
return jsonify(food[foodkind])

关于javascript - Flask Dynamic 依赖下拉列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44646925/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com