如何为Google Appengine Python创建自定义错误页面的app.yaml文件
在一个用Python写的Google Appengine项目中,我想在出现错误时显示我自己的错误信息。我想使用错误处理程序,具体可以参考这个链接:http://code.google.com/intl/nl/appengine/docs/python/config/appconfig.html#Custom_Error_Responses
在这个应用程序中,我使用了webapp,并设置了debug = False
当我在代码中制造一个错误时,浏览器会显示标准的500 服务器错误信息。
我已经创建了一个自定义错误页面,命名为default_error.html
我的问题是:这个自定义错误页面应该保存在哪里呢?
顺便说一下,这是我的app.yaml
代码:
application: customerrorpage
version: 1
runtime: python
api_version: 1
error_handlers:
- file: default_error.html
handlers:
- url: /good.htm
static_files: static/good.htm
upload: static/good.htm
- url: /
static_files: static/good.htm
upload: static/good.htm
- url: /.*
script: main.py
3 个回答
一种处理这个问题的方法是定义一个叫做'BaseRequestHandler'的类,然后让你的请求处理器从这个类继承。这个BaseRequestHandler类可以重写一个叫做handle_exception()的方法(你可以查看这个链接了解更多:http://code.google.com/appengine/docs/python/tools/webapp/requesthandlerclass.html#RequestHandler_handle_exception),这样就可以用来显示错误页面。
我大致明白它是怎么工作的了。谢谢大家的回答。
HTM文件的位置可以在核心目录里,也可以在一个单独的文件夹里。如果是这样的话,可以在你的app.yaml文件中使用下面的代码:
error_handlers:
- file: error_handlers/default_error.html
要显示的html文件现在应该放在error_handlers这个文件夹里。
当你在main.py中导入一个不存在的模块时,上面的页面就会显示出来。
为了触发500错误,我使用了webapp2来显示一个自定义的错误页面。每当发生错误时,这个页面都会显示出来。即使是出现超出配额的错误,而app.yaml配置也没问题。我还把webapp2去掉,改回使用webapp。现在根本不显示任何页面。
我还有一个应用目前超出了配额。怎么才能显示超出配额的html页面?这是个bug吗?
只用Python部分来定义一个自定义的404错误页面对我来说是有效的:
app.error_handlers[404] = handle_404
def handle_404(request, response, exception):
c = {'exception': exception.status}
t = jinja2.get_jinja2(app=app).render_template('404.html', **c)
response.write(t)
response.set_status(exception.status_int)
这样做可以让你更好地控制错误信息和其他你可能想要显示的内容。