如何将此功能重定向到给定的html页面?

时间:2014-09-01 08:44:19

标签: python flask

我试图为我使用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')

1 个答案:

答案 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)