【问题标题】:how to redirect to a external 404 page python flask如何重定向到外部 404 页面 python 烧瓶
【发布时间】:2015-06-13 11:54:42
【问题描述】:

我正在尝试将我的 404 重定向到这样的外部 URL:

@app.route('404')
def http_error_handler(error):
    return flask.redirect("http://www.exemple.com/404"), 404

但它不起作用。我不断得到:

未找到 在服务器上找不到请求的 URL。如果您手动输入了 URL,请检查您的拼写并重试。

【问题讨论】:

  • 问题可能是您在重定向旁边传递的 404 状态。

标签: python redirect error-handling flask


【解决方案1】:

你应该试试这样的:

from flask import render_template

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404

来源http://flask.pocoo.org/docs/1.0/patterns/errorpages/

【讨论】:

  • 我在同一个项目中没有 404.html 文件我需要重定向到另一个网站并且仍然有我的 404 状态代码我已经多次查看文档..
  • 好吧,您不必实际重定向到模板,请执行以下操作 return redirect("example.com", code=302)
  • 这只是一个展示如何处理错误的示例,然后你可以在里面做任何你想做的事情
  • 哥们,只要输入404,这是一个例子,你想要什么,只是复制和粘贴?
  • 所以你正在处理 404 错误,但是什么时候应该重定向到 exemple.com/404 你却收到了这个错误? “未找到请求的 URL”,例如大约 500 个内部服务器错误?
【解决方案2】:

您不能这样做 - 用户代理(在大多数情况下是浏览器)查看返回的状态代码以确定要做什么。当您返回 404 状态代码时,您对用户代理说的是“我不知道您在请求什么”,然后用户代理可以:

  • 在响应正文中显示您返回的内容
  • 向最终用户显示自己的错误消息
  • 结合使用以上两个选项

redirect 实际上是creates a little HTML response (via werkzeug.exceptions),通常最终用户看不到,因为用户代理在看到 302 响应时会跟随 Location 标头。但是,当您提供自己的状态代码 (404) 时,您覆盖状态代码。

解决方法是:

  • 删除状态代码(可能会以向最终用户发送错误信号为代价)
  • 使用a meta:refresh and / or JavaScript redirect 发送404(稍微好一点,仍然令人困惑):

    return redirect("/where-ever"), 404, {"Refresh": "1; url=/where-ever"}
    

【讨论】:

    【解决方案3】:

    试试这个而不是路线

    from flask import request
    @app.errorhandler(404)
    def own_404_page(error):
        pageName =  request.args.get('url')
        print(pageName)
        print(error)
        f = open('erreur404.tpl')
        return f.read()
    

    【讨论】:

    • 您的示例中的几乎每一行都非常非pythonic。您建议使用 CamelCase 代替 snake_case,读取文件模板而不是返回响应,并毫无意义地打印页面名称。只是我的意见。
    • 什么是请求?
    • @JohnD 现在可能已经发现了,但那是指flask.request
    猜你喜欢
    • 2017-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多