Python 如何使此函数重定向到给定的html页面?
我正在尝试为我使用Flask创建的一个练习编写一个简单的脚本,该脚本根据输入表单的膳食价值计算小费金额 下面的第一个函数(Dine_total)获取html表单中输入的值,并将其发送到第二个函数(tip_calculator),该函数随后处理小费金额,然后呈现一个新的html(tip_amount.html),其中显示必须支付的小费金额 第一位工作正常,但当调用第二个函数时,我不会被重定向到新的“tip_amount.html”。那么如何让函数重定向到该html呢Python 如何使此函数重定向到给定的html页面?,python,flask,Python,Flask,我正在尝试为我使用Flask创建的一个练习编写一个简单的脚本,该脚本根据输入表单的膳食价值计算小费金额 下面的第一个函数(Dine_total)获取html表单中输入的值,并将其发送到第二个函数(tip_calculator),该函数随后处理小费金额,然后呈现一个新的html(tip_amount.html),其中显示必须支付的小费金额 第一位工作正常,但当调用第二个函数时,我不会被重定向到新的“tip_amount.html”。那么如何让函数重定向到该html呢 @app.route('/ti
@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表单也很重要;在没有重定向的情况下,重新加载将再次应用相同的“更改”,重定向后,您只需重新加载结果页,而不是重新应用更改。