Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/284.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使此函数重定向到给定的html页面?_Python_Flask - Fatal编程技术网

Python 如何使此函数重定向到给定的html页面?

Python 如何使此函数重定向到给定的html页面?,python,flask,Python,Flask,我正在尝试为我使用Flask创建的一个练习编写一个简单的脚本,该脚本根据输入表单的膳食价值计算小费金额 下面的第一个函数(Dine_total)获取html表单中输入的值,并将其发送到第二个函数(tip_calculator),该函数随后处理小费金额,然后呈现一个新的html(tip_amount.html),其中显示必须支付的小费金额 第一位工作正常,但当调用第二个函数时,我不会被重定向到新的“tip_amount.html”。那么如何让函数重定向到该html呢 @app.route('/ti

我正在尝试为我使用Flask创建的一个练习编写一个简单的脚本,该脚本根据输入表单的膳食价值计算小费金额

下面的第一个函数(Dine_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模板中显示的参数(tip)

@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')

您只需调用
tip\u calculator()
函数,而不返回其响应:

if form.validate_on_submit():
    meal = form.meal.data
    tip_calculator(meal)
在此处添加一个
返回值

if form.validate_on_submit():
    meal = form.meal.data
    return tip_calculator(meal)
tip\u calculator
在这里只是一个支持功能;您根本不需要将其注册为路由

您仍然可以使用重定向,但通常会在URL中传递任何参数作为查询参数;使用
url\u 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\u计算器将从请求中获取该值:

@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)

谢谢@Martijn!但是,当我尝试使用url_作为url参数并将膳食值作为url参数传递时,我得到一个错误:
raisebuilderror(端点、值、方法)BuildError:('tip_calculator',{'mean':300},None)
@Martijn pieterst这意味着没有
tip\u计算器
端点,或者您的视图版本有一个参数过于严格的路由。确保你有一个注册的
tip\u计算器
函数,就像我在答案中显示的那样。好的,很好,我会研究一下。在您看来,使用url_for方法并将值作为url参数传递,而不是直接调用返回函数并将变量作为函数参数传递,是否有好处?或者,在什么样的用例中,你会使用一个而不是另一个呢?这取决于网站访问者认为这应该是什么样子;重定向会在位置栏中为他们提供一个新的URL。然后,重新加载页面是一种不同的体验,就像他们的浏览器会话历史记录(使用“后退”按钮)一样。这对于POST表单也很重要;在没有重定向的情况下,重新加载将再次应用相同的“更改”,重定向后,您只需重新加载结果页,而不是重新应用更改。