如何使用适用于Google Appengine Python的app.yaml创建自定义错误页面

时间:2012-01-22 21:24:06

标签: python google-app-engine

对于用Python编写的Google Appengine项目,我希望在发生错误时拥有自己的错误消息。我想使用error_handlers,如下所述: http://code.google.com/intl/nl/appengine/docs/python/config/appconfig.html#Custom_Error_Responses

在应用程序中,我使用带有debug = False

的webapp

当我在代码中创建错误时,我从浏览器中收到标准的 500 Server错误消息。

我创建了一个名为default_error.html

的自定义错误页面

问题是:保存此自定义错误页面的位置?

BTW这是我的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 个答案:

答案 0 :(得分:4)

使用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)

这使您可以更好地控制可能要显示的错误消息和其他动态。

答案 1 :(得分:0)

解决此问题的一种方法是定义一个'BaseRequestHandler'类,您的请求处理程序将从该类进行子类化。 BaseRequestHandler类可以覆盖handle_exception()方法(请参阅http://code.google.com/appengine/docs/python/tools/webapp/requesthandlerclass.html#RequestHandler_handle_exception)以呈现错误页面。

答案 2 :(得分:0)

部分发现它是如何运作的。谢谢大家的答案。

HTM文件的位置可以位于核心或单独的目录中。如果是这种情况,请使用app.yaml文件中的以下代码:

error_handlers:
- file: error_handlers/default_error.html

现在应该将显示的html文件放在error_handlers目录

在main.py中导入一个不存在的模块时,会显示上面的页面。

要获取500错误,我使用webapp2显示自定义错误页面。发生错误时始终显示此页面。即使存在over_quota错误且app.yaml配置正确。我还删除了webapp2并再次使用了webapp。现在根本没有显示任何页面。

我有另一个应用程序,目前过度引用。如何显示over_quota html页面?这是一个错误吗?