Python重定向(有延迟)

时间:2018-11-15 12:59:18

标签: python redirect flask

所以我在烧瓶上运行了这个python页面。直到我想要重定向之前,它都可以正常工作。

@app.route("/last_visit")
def check_last_watered():
    templateData = template(text = water.get_last_watered())
    return render_template('main.html', **templateData)
    return redirect(url_for('new_page')) #with a delay here of 3 secs

该站点工作正常,但无法重定向,而且我不知道如何延迟整个过程。 想法...请:-)

3 个答案:

答案 0 :(得分:0)

好吧,您的函数只会返回渲染的模板,而不会到达重定向语句。如果要显示页面,然后在延迟后进行重定向,请在模板中使用javascript重定向:

@app.route("/last_visit")
def check_last_watered():
    templateData = template(text = water.get_last_watered())
    templateData['redirect_url'] = url_for('new_page')
    return render_template('main.html', **templateData)

然后在您的main.html中:

<script>
    setTimeout(function(){
        window.location.href = '{{redirect_url}}';
    }, 2000);
</script>

答案 1 :(得分:0)

您可以使用return语句并返回字符串格式。

作为<redirect url>,您可以将任何可用的URL设置为后端。

此解决方案类似于dmitrybelyakov的解决方案,但是它是一种快速解决方案,无需处理新的小型html模板。

return f"<html><body><p>You will be redirected in 3 seconds</p><script>var timer = setTimeout(function() {{window.location='{ <redirect url> }'}}, 3000);</script></body></html>" 

示例:

让我们说您要提交表单并遇到运行时问题,要求您在一定时间后执行此重定向。

@app.route('/')
def your_func():
  form = FormFunc()

  if form.validate_on_submit():
    # do something
    wait_time = 3000
    seconds = wait_time / 1000
    redirect_url = 'https://www.example.com/'

    # if the validation is successful, forward to redirect page, wait 3 seconds, redirect to specified url
    return f"<html><body><p>You will be redirected in { seconds } seconds</p><script>var timer = setTimeout(function() {{window.location='{ redirect url }'}}, { wait_time });</script></body></html>"

# if the validation is not successful, reload the form
return render_template('formPage.html', form=form)

答案 2 :(得分:0)

如果您需要渲染模板并在三秒钟后重定向,则可以将refresh作为时间传递,而url则使用您需要重定向的URL。

@app.route('/error/', methods=['GET'])
def error():
    return render_template('error.html'), {"Refresh": "1; url=https://google.com"}