我已经实现了一个全局 appIncluder 函数,该函数作为 includeme 与要包含的包的init .py 一起导入。
includeme (ApplicationIncluder) 接收配置对象,因此很容易使用 config.package 及其变量/方法/类(存在于相同的init .py 和子模块中。
非常感谢这个想法!
编码:
项目:要部署在 foo.foo.apps 目录中的“foo”应用程序
结构:
foo
|-foo
|- __init__.py
|- appincluder.py
|-apps
|-test
|- __init__.py
|- views.py
|- templates
|- test.jinja2
富/富/初始化.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/apps/test/ init .py
from foo.appincluder import appIncluder as includeme
prefix = '/test'
routes = {
'test': '/home'
}
foo/foo/apps/test/views.py
from pyramid.view import view_config
@view_config(route_name='test', renderer='templates/test.jinja2')
def test(request):
return {}
我希望它可以帮助某人。