1

出于调试目的,我试图查看从我的 html 文件中请求的静态文件(css、js、jpg 等)文件。我在这里阅读了文档:在此处输入链接描述 我已经设置了我的配置,如下所示:

config.add_route('catchall_static', 'static/*subpath')

我的观点是:

@view_config(route_name='catchall_static')
path_info = request._headers.environ['PATH_INFO']
log.debug('path info = {0} {1}'.format(path_info, query_string))
return request.response

有了这段代码,就会发生几件事。

1)虽然静态文件来自视图,但它们并没有实际加载到浏览器中 2)当静态文件通过视图时,我的代码至少可以用于日志记录,但 50% 的时间我会收到此错误:

Traceback: path_info = request._headers.environ['PATH_INFO'] AttributeError: 'NoneType' object has no attribute 'environ'

错误似乎集中在我的 html 文件(例如 css 文件)中的早期部分,而我的 html 文件底部的 .js 文件有时可以工作。

所以基本上我不知道我是接近还是完全走错了方向来解决问题。有人知道正确的做法吗?

4

1 回答 1

1

你确定,这条路由成功地处理了任何请求吗?实现目标的可能性有:WSGI 中间件、Pyramid Tween 或自定义事件订阅者。

自定义订阅者可能是最简单的订阅者。在创建响应之前调用此订阅者,因此它无法知道响应代码、内容等。要完成此操作,您可以添加请求完成回调或使用其他方法之一。

from pyramid.events import NewRequest
from pyramid.events import subscriber

@subscriber(NewRequest)
def static_logger(event):
    logger = logging.getLogger('static')
    request = event.request

    if request.path_info.startswith('/static'):
        logger.info('static request: {} {}'.format(request.path_info,
                                                   request.query_string))

并激活 development.ini 中的记录器:

[loggers]
keys = root, static


[logger_static]
level = DEBUG
handlers = console
qualname = static
于 2014-01-01T02:43:36.717 回答