我试图为我使用Flask创建的练习编写一个简单的脚本,它根据输入到表单中的膳食值计算提示量。
下面的第一个函数(meal_total)获取在html表单中输入的值并将其发送到第二个函数(tip_calculator),然后处理提示量,然后渲染一个新的html(tip_amount.html),显示多少提示必须付钱。
第一位正常,但是当第二个函数被调用时,我没有被重定向到新的' tip_amount.html。那么如何让函数重定向到那个html。
@app.route('/tip', methods = ['GET', 'POST'])
def meal_total():
form = Tip()
if form.validate_on_submit():
meal = form.meal.data
tip_calculator(meal)
else:
print "please enter your meal amount"
return render_template('tip.html',
form = form)
@app.route('/tip-amount')
def tip_calculator(meal):
tax = 0.2
tip = 0.15
meal_total = meal + meal * tax
tip = meal_total * 0.15
return render_template('tip_amount.html',
tip = tip)
注意:我尝试使用下面的重定向功能而不是render_template(),但它不允许我发送我需要在tip_amount.html模板中显示的参数(提示)。
@app.route('/tip-amount')
def tip_calculator(meal):
tax = 0.2
tip = 0.15
meal_total = meal + meal * tax
tip = meal_total * 0.15
return redirect('/tip_amount')
答案 0 :(得分:1)
您只是在不返回响应的情况下调用tip_calculator()
函数:
if form.validate_on_submit():
meal = form.meal.data
tip_calculator(meal)
在那里添加return
:
if form.validate_on_submit():
meal = form.meal.data
return tip_calculator(meal)
tip_calculator
仅仅是一个支持功能;你根本不需要将它注册为一条路线。
您仍然可以使用重定向,但是您通常会将任何参数作为查询参数传递到URL中;这可以通过url_for()
轻松完成,任何额外的参数都会呈现为URL参数:
from flask import url_for
if form.validate_on_submit():
meal = form.meal.data
return redirect(url_for('tip_calculator', meal=meal))
会将您重定向到/tip-amount?meal=<meal>
(填写膳食值)。
然后,您的tip_calculator
路由会从请求中获取该值:
@app.route('/tip-amount')
def tip_calculator():
meal = request.args.get('meal', type=int)
if meal is None:
# redirect back to form if the parameter is missing or not an integer
return redirect(url_for('meal_total'))
tax = 0.2
tip = 0.15
meal_total = meal + meal * tax
tip = meal_total * 0.15
return render_template('tip_amount.html', tip=tip)