含めるパッケージのinit .py を含むincludeme としてインポートされるグローバル appIncluder 関数を実装しました。
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/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 {}
誰かの役に立てば幸いです。