如何在ApplicationCreated事件中使用route_url方法

时间:2015-07-07 18:58:06

标签: python pyramid

我订阅了ApplicationCreated,我需要在我的网络应用中获得相同的网址 在视图中,我可以使用route_url方法获取网址 但是如何在ApplicationCreated事件中获取url?

例如在视图中我可以使用此代码:

from pyramid.view import view_config

@view_config(route_name="home")
def home(request):
    print request.route_url('home')

控制台中的结果:

http://example.com/

在这种情况下我如何使用相同的代码:

from pyramid.events import ApplicationCreated, subscriber

@subscriber(ApplicationCreated)
def app_start(event):
    print ????.route_url('home') # how to get access to route_url

1 个答案:

答案 0 :(得分:1)

我认为没有办法。您正尝试在没有请求的情况下使用请求所需的方法。请参阅sourcecode https://github.com/Pylons/pyramid/blob/master/pyramid/config/init.py#L995

无需请求您可以获得路径对象:

home = app.routes_mapper.get_route('home')
print(home.path)

自定义生成网址的示例:

delete = app.routes_mapper.get_route('pyramid_sacrud_delete')
print(delete.path)  # 'admin/{table}/delete/*pk'
delete.generate({'table': 'foo', 'pk': ['id',2,'id2',3]})  # '/admin/foo/delete/id/2/id2/3'

你的例子:

from pyramid.events import ApplicationCreated, subscriber

@subscriber(ApplicationCreated)
def app_start(event):
    print event['app'].app.routes_mapper.get_route('home')