如何重定向到外部404页面python烧瓶

Pho*_*osy 6 python error-handling redirect flask

我怎么能实现这一点我是python和flask的新手,我正在尝试将我的404重定向到这样的外部URL:

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

但它不起作用我得到

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

lap*_*ira 9

你应该尝试这样的事情:

from flask import render_template

@app.errorhandler(404)
def page_not_found(e):
    return render_template('404.html'), 404
Run Code Online (Sandbox Code Playgroud)

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

  • 那么你不必实际重定向到模板,做这样的事情返回重定向("http://www.example.com",代码= 302) (2认同)

Sea*_*ira 5

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

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

redirect实际上创建了一个小的HTML响应(通过werkzeug.exceptions),通常最终用户看不到,因为用户代理Location在看到302响应时跟随标题.但是,在提供自己的状态代码时会覆盖状态代码(404).

解决方法是:


小智 5

试试这个而不是路线

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()
Run Code Online (Sandbox Code Playgroud)

  • 您示例中的几乎每一行都非常非 Pythonic。您建议使用 CamelCase 代替 snake_case,您读取文件模板而不是返回响应,并且毫无意义地打印页面名称。只是我的观点。 (4认同)