首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >龙卷风的StaticFileHandler中的默认文件

龙卷风的StaticFileHandler中的默认文件
EN

Stack Overflow用户
提问于 2016-03-21 00:25:52
回答 2查看 1.8K关注 0票数 0

我有以下应用程序配置:

代码语言:javascript
复制
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'不工作。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 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函数中的错误。这是创建自定义错误页的推荐方法:

代码语言:javascript
复制
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)
票数 1
EN

Stack Overflow用户

发布于 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)。祝好运!

我的英语很差,我不知道你能否拿到^_^。我很高兴与你交流经验。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36121365

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档