我试图从一个没有用@app装饰器修饰的函数做一个简单的重定向,我怎么能这样做(大概我需要让check_status()知道应用程序上下文)?
def check_status():
return redirect("http://google.com")
@dashboard_bp.route('/dashboard')
@login_required
def website_users():
check_status()
return render_template('website_users.html')
答案 0 :(得分:3)
上下文是全局全局。当您从check_status()
拨打website_users()
时,上下文处于有效状态。
不是redirect()
可调用的需要一个上下文;它所做的只是生成一个Response()
对象,不需要上下文。
忽略了check_status()
的返回值。也许您需要检查check_status()
是否正在返回某些内容:
status = check_status()
if status is not None:
# redirect
return status
或者,让check_status()
引发异常。您可以在视图中处理该异常(并将其转换为重定向响应),或者您可以注册errorhandler()
function来处理专用异常:
class StatusDenied(Exception):
pass
@app.errorhandler(StatusDenied)
def redirect_on_status_denied(error):
return redirect("http://google.com")
def check_status():
raise StatusDenied