Я реализовал глобальную функцию appIncluder, которая импортируется как includeme с init .py включаемого пакета.
includeme (ApplicationIncluder) получает объект конфигурации, поэтому тогда легко использовать config.package и его переменные / методы / классы (присутствующие в тех же init .py и подмодулях.
Большое спасибо за эту идею!
код:
проект: 'foo'
приложения для развертывания в каталоге foo.foo.apps
Состав:
foo
|-foo
|- __init__.py
|- appincluder.py
|-apps
|-test
|- __init__.py
|- views.py
|- templates
|- test.jinja2
Foo / Foo / INIT .py:
config.include('foo.apps.test')
Foo / Foo / appincluder.py
def appIncluder(config):
app = config.package
prefix = app.prefix
routes = app.routes
for route,url in routes.items():
config.add_route(route,prefix + url)
config.scan(app)
log.info('app: %s included' % app.__name__)
Foo / Foo / приложения / тест / INIT .py
from foo.appincluder import appIncluder as includeme
prefix = '/test'
routes = {
'test': '/home'
}
Foo / Foo / приложения / тест / views.py
from pyramid.view import view_config
@view_config(route_name='test', renderer='templates/test.jinja2')
def test(request):
return {}
Надеюсь, это кому-нибудь поможет.