我有以下应用程序配置:
settings = {
'default_handler_class': BaseHandler
}
app = web.Application([
(r'/', IndexHandler),
(r'/ws', SocketHandler),
(r'/js/(.*)', web.StaticFileHandler, {'path': 'assets/js', 'default_filename': 'templates/error.html'}),
(r'/css/(.*)', web.StaticFileHandler, {'path': 'assets/css'}),
(r'/images/(.*)', web.StaticFileHandler, {'path': 'assets/images'})
], **settings)当我输入http://localhost:8888/js/d3.min.js时,文件就被提供了,但是当我误传文件名并提供http://localhost:8888/js/d3.mi.js时,我想获得位于templates/error.html的默认错误页面。对于像http://localhost:8888/not/existing这样的URL,它工作得很好,但是http://localhost:8888/js/d3.mi.js给了我简单的404: Not Found。
我在文档中发现了以下部分:
若要在请求目录时自动提供像index.html这样的文件,请在应用程序设置中设置index.html,或为StaticFileHandler添加default_filename作为初始化器参数。
但是,我不知道应该在哪里指定所提到的代码。我的代码中的'default_filename': 'templates/error.html'不工作。
发布于 2016-03-21 09:50:14
default_filename
default_filename中指定的文件应该位于给定的静态路径中。因此,如果将error.html移动到assets/js目录,而不是导航到/js/,您将看到error.html的内容。
基本上,这个功能是一个有限制使用酶(imho)的助手。更多报道来自https://stackoverflow.com/a/27891339/681044。
自定义错误页
每个请求处理程序都处理/呈现write_error函数中的错误。这是创建自定义错误页的推荐方法:
class MyStaticFileHandler(tornado.web.StaticFileHandler):
def write_error(self, status_code, *args, **kwargs):
# custom 404 page
if status_code in [404]:
self.render('templates/error.html')
else:
super().write_error(status_code, *args, **kwargs)发布于 2016-03-21 01:56:46
实际上,'default_filename‘在您的代码中工作得很好。
default_filename是什么意思?
"default_filename“意味着如果您请求一个目录(如"http://localhost:1234/js/”),服务器将向您返回一个默认文件。因此,您必须知道“默认文件”不是错误文件,"default_filename“不是您所需要的。
请问你需要什么?
编写"StaticFileHandler“的子类将解析。在"validate_absolute_path“的"StaticFileHandler”方法中
if not os.path.exists(absolute\_path): raise HTTPError(404)
不要引发404,只需返回错误文件路径(如js/error.js)。祝好运!
我的英语很差,我不知道你能否拿到^_^。我很高兴与你交流经验。
https://stackoverflow.com/questions/36121365
复制相似问题