2

我正在使用/favicon.ico 和 /robots.txt URL的食谱说明并看到一些奇怪的东西。我正在添加路线add_route

def main(global_config, **settings):
    """ This function returns a Pyramid WSGI application.
    """
    # ....
    config = Configurator(settings=settings)
    config.add_static_view('public', 'public', cache_max_age=3600)
    config.add_route('favicon.ico', '/favicon.ico')
    config.add_route('robots.txt', '/robots.txt')
    config.add_route('home','/{id}')  #don't worry about this one
    config.scan()
    return config.make_wsgi_app()

并像这样定义视图:

@view_config(name='favicon.ico')
def favicon_view(context, request):
    return _fi_response


@view_config(name='robots.txt')
def robotstxt_view(context, request):
    return _robots_response

根据上述链接中的说明在何处创建_fi_response和创建。_robots_response可悲的是,当我转到我的一个页面时,没有 favicon 并且转到localhost:6544/favicon.ico,它会导致 404。奇怪的是,当我打开所有调试时,我看到了这个:

2012-10-13 21:38:50,437 DEBUG [trosted][Dummy-5] route matched for url http://localhost:6544/favicon.ico; route_name: 'favicon.ico', path_info: u'/favicon.ico', pattern: '/favicon.ico', matchdict: {}, predicates: ''
2012-10-13 21:38:50,438 DEBUG [trosted][Dummy-5] debug_notfound of url http://localhost:6544/favicon.ico; path_info: u'/favicon.ico', context: <pyramid.traversal.DefaultRootFactory instance at 0x102b6a7a0>, view_name: u'', subpath: (), traversed: (), root: <pyramid.traversal.DefaultRootFactory instance at 0x102b6a7a0>, vroot: <pyramid.traversal.DefaultRootFactory instance at 0x102b6a7a0>, vroot_path: ()

这让我认为网站图标是由一个进程而不是另一个进程找到的。想知道是否有人对我做错了什么有任何想法。

4

1 回答 1

4

所以问题是您添加了一个名为“favicon.ico”的路由,并且您没有将视图附加到该路由。因此,日志输出表明路由匹配。您view_config在遍历中使用了实际上匹配“名称”概念的“名称”参数。解决此问题的方法是使用“route_name”选项来view_config.

@view_config(route_name='favicon.ico')
def favicon_view(request):
    return _fi_response

如果您的站点中没有包含/{id}所有其他 1 级深度 url 的包罗万象的路由,您可以删除 favicon 路由并让遍历使用“名称”参数处理它。

于 2012-10-14T05:32:07.683 回答