我订阅了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
答案 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')