首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在self.render()中使用StaticFileHandler

在self.render()中使用StaticFileHandler
EN

Stack Overflow用户
提问于 2015-04-10 02:39:42
回答 1查看 1.6K关注 0票数 0

我试图以这样一种方式扩展StaticFileHandler,即我可以处理文件请求,但可以调用文件上的self.render(filename, **kwargs)来实际向客户端提供服务。(是的,我意识到在这一点上它不再是一个静态文件本身)。

下面是我试图运行的代码:

代码语言:javascript
复制
class MustacheFileHandler(tornado.web.StaticFileHandler):
    def get(self, filename):
        self.render(_STATIC_ROOT_ + '/' + path.split('/')[len(path.split('/'))-2], userLoginStatus='you are logged out!')

# ...
class Application(tornado.web.Application):
    def __init__(self, **overrides):
         handlers = [(r'/(.*)', MustacheFileHandler, {'path' : _STATIC_ROOT_})]
# ...

..。其中,_STATIC_ROOT_是在启动时加载的服务器配置文件中包含的变量。

我遇到的问题是,每当我试图对服务器上存在的文件执行GET时,就会得到以下错误:

代码语言:javascript
复制
Traceback (most recent call last):
  File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 1332, in _execute
    result = method(*self.path_args, **self.path_kwargs)
  File "myfile.py", line 173, in get
    self.render(_STATIC_ROOT_ + '/' + path.split('/')[len(path.split('/'))-2], userLoginStatus='you are logged out!')
  File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 747, in render
    self.finish(html)
  File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 877, in finish
    self.set_etag_header()
  File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 1257, in set_etag_header
    etag = self.compute_etag()
  File "/usr/local/lib/python2.7/dist-packages/tornado/web.py", line 2185, in compute_etag
    version_hash = self._get_cached_version(self.absolute_path)
AttributeError: 'MustacheFileHandler' object has no attribute 'absolute_path'

我不知道是什么导致了这个错误,也不知道我如何处理它。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-10 16:05:46

如果响应不是静态的,为什么要使用StaticFileHandler?这可能会打破类中内置的假设。

StaticFileHandler被设计为以有限的方式被子类化,就像其文件中描述的那样。特别是,子类不应该覆盖get(),并且试图这样做会导致所看到的错误。

如果您想要使用龙卷风模板引擎作为磁盘上文件的一种预处理程序,您可以尝试通过覆盖get_contentget_content_size来做到这一点,并让它们调用self.render_string() (还需要考虑到如果模板不是单独独立包含的,则需要更改get_content_version以考虑所有依赖关系)。但是,这需要混乱的缓存,以避免多次呈现模板。最好是A)用普通的RequestHandler动态呈现模板。或者,编写一个小脚本来呈现所有模板,将它们写入磁盘,并将结果作为实际的静态文件提供。

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

https://stackoverflow.com/questions/29552430

复制
相关文章

相似问题

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