抓住静态'找不到文件'错误

时间:2014-09-16 20:59:23

标签: python google-app-engine yaml webapp2

我有一个全能的'像这样的错误处理程序的正则表达式:

(r'/.*', errors.Error)

列在之后所有其他人,为了匹配"其他所有"。

当页面不存在时,这可以正常失败。

但是,我还有一个静态文件目录,上传如下:

handlers:
- url: /files
  static_dir: files

因此,如果我尝试在/files/中加载与该目录中的现有文件不对应的URL,我会得到:

  

错误:未找到

     

在此服务器上找不到请求的网址。

无需列出要单独上传的每个文件,如何捕获此错误;理想情况下,上面使用相同的处理程序errors.Error

2 个答案:

答案 0 :(得分:3)

不幸的是,没有好办法做到这一点。功能请求位于:https://code.google.com/p/googleappengine/issues/detail?id=8380&q=type%3DFeature%20error%20404&colspec=ID%20Type%20Component%20Status%20Stars%20Summary%20Language%20Priority%20Owner%20Log

由于static_dir中没有文件,因此无法为404配置自定义处理程序或静态错误页面。如果URL匹配子路径下的任何内容({1}},则static_files也是如此:

static_dir

URL路径与特殊静态处理程序的URL模式匹配。然后静态处理程序意识到所请求的文件不存在。 Control不会返回到路由逻辑,也没有机会自定义静态处理程序的响应。静态处理程序仅返回通用404。

如果handlers: - url: /files/(.*) static_files: files/\1 upload: files/.* 的网址格式与现有的文件名完全匹配,那么不匹配的网址路径将落入后续处理程序,包括底层的全能。但这有效地列出了配置文件中的所有静态文件:

static_files

同样不幸的是,handlers: - url: /files/(foo.png|bar.js|baz.css) static_files: files/\1 upload: files/.* - url: .* script: errorhandler.app # Or for a static error page: - url: .* static_files: error.html upload: error.html 没有帮助,因为它还不支持自定义404。值得注意的是,如果error_handlers:中没有一个与URL匹配,则App Engine返回的404也是通用的,但也无法进行自定义。

完全满足此要求而不在处理程序的URL模式中列出静态文件名的唯一方法是不使用静态文件,而是使用应用程序处理程序从应用程序文件中提供静态数据(并提供自定义404消息)如果没有找到)。

handlers:

答案 1 :(得分:0)

捕获404就像下面的代码行一样简单

app.error_handlers[404] = handle_404

其中 handle_404 是一种处理异常的def方法+你不会'需要"全能"正则表达式。

请参阅本指南,详细了解" WSGI应用中的例外情况"部分:https://webapp-improved.appspot.com/guide/exceptions.html

另请参阅app.yaml error_handlers 参数。 See more here