2

/favicon.icoおよび/robots.txtURLのクックブックの説明を使用していて、何か奇妙なことがわかりました。ルートを追加してい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悲しいことに、自分のページの1つに移動すると、ファビコンがなく、に移動するとlocalhost:6544/favicon.ico404になります。奇妙なことに、すべてのデバッグをオンにすると、次のように表示されます。

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

サイト内の他のすべての1レベルの深さのURLを踏みにじるキャッチオールルートがない場合は/{id}、ファビコンルートを削除し、トラバーサルに「name」パラメーターを使用して処理させることができます。

于 2012-10-14T05:32:07.683 に答える