Python烧瓶重定向

Python烧瓶重定向,python,flask,Python,Flask,我有两个html文件(control.html和reason.html)。代码首先加载reason.html页面并使用POST方法接收用户输入,然后在执行某些检查之后,我想重新加载control.html 问题是我无法加载control.html。您忽略了来自check()的返回值。因此,将发出重定向信号的对象将丢失 您应该检查check()中的返回值,然后返回该结果,或者返回的'reason.html'结果: def check(): if 3>2: return redi

我有两个html文件(control.html和reason.html)。代码首先加载reason.html页面并使用POST方法接收用户输入,然后在执行某些检查之后,我想重新加载control.html


问题是我无法加载control.html。您忽略了来自
check()
的返回值。因此,将发出重定向信号的对象将丢失

您应该检查
check()
中的返回值,然后返回该结果,或者返回
的'reason.html'
结果:

def check():
  if 3>2:
     return redirect(url_for('control'))

@app.route('/reason', methods=['GET','POST'])
def reason():
  check()
  return render_template('reason.html')

@app.route('/control', methods=['GET','POST']
def control():
 return render_template('control.html')
另一方面,您的
check()
有两个返回路径。一个显式调用
return
,另一个隐式返回
None
,因为它落在函数的末尾。这是完全合法的,但在风格上令人困惑。试试这个:

# UNTESTED
@app.route('/reason', methods=['GET','POST'])
def reason():
  check_result = check()
  if check_result:
     return check_result
  return render_template('reason.html')
也许更容易理解的代码安排是让
check
将其职责限制为简单地检查和报告结果;然后,
reason()
可以负责显示任何页面,如下所示:

def check():
  if 3>2:
     return redirect(url_for('control'))
  return None

reason()
需要
返回check()
,而不仅仅是调用它然后扔掉它返回的重定向响应。@jasonharper my bad。。它实际上返回我编辑的reason.htmlquestion@ShishayGhebrehiwet@jasonharper所说的是,您实际上应该使用
check()
的返回值,事实上,如果存在除
None
之外的其他返回值,您希望返回它。实际上,您只是忽略了它,一直返回
reason.html
。@bgse check()除了加载另一个html页面外,不返回任何内容。但是reason()必须加载reason.html,这就是我获取用户输入并将其发送给check()的地方。check()检查某些内容,如果为true,则返回control.html页面。thanks@ShishayGhebrehiwet您似乎假设
返回重定向(…)
将导致重定向。事实并非如此,它只是返回一个带有重定向的响应。如果确实需要重定向,则需要在视图函数
reason()
中返回此响应。更不容易混淆的可能是根据实际执行的检查返回truthy/falsy,并在视图函数本身中使用
if check():return redirect(…)
,至少在这个简单的例子中,只有一个可能的重定向目标。谢谢。如果我没听清你说的话,请随意编辑。@Robᵩ 谢谢你们,它工作得很好。。。我真的很感谢你的努力干杯
#UNTESTED
def check():
  if 3>2:
     return True
  return False

# UNTESTED
@app.route('/reason', methods=['GET','POST'])
def reason():
  if check():
     return redirect(url_for('control'))
  return render_template('reason.html')