当我使用Cookie切割器创建默认的金字塔应用时,它会生成一个包含以下内容的INI文件:
[app:myapp]
use = egg:myproject#myapp
pyramid.reload_templates = true
pyramid.debug_authorization = false
pyramid.debug_notfound = false
pyramid.debug_routematch = false
pyramid.default_locale_name = en
pyramid.includes = pyramid_debugtoolbar
现在,我正在尝试使用Configurator
中的__init__.py
对象在python代码中添加这些相同的设置,而我发现以下内容似乎是相同的:
config.include('pyramid_debugtoolbar')
config.add_settings({
'pyramid.reload_templates' : 'true','pyramid.debug_authorization' : 'false','pyramid.debug_notfound' : 'false','pyramid.debug_routematch' : 'false','pyramid.default_locale_name' : 'en','pyramid.includes' : 'pyramid_debugtoolbar',})
但是在python中应用这些设置时,第一行config.include('pyramid_debugtoolbar')
是必需的,否则将不起作用。但是,在INI版本中,设置pyramid.includes = pyramid_debugtoolbar
就足够了。
进一步挖掘之后
在我的代码中向上查看堆栈,我发现该设置确实可以这种方式工作...
def main(global_config,**settings):
""" This function returns a Pyramid WSGI application."""
settings.update({'pyramid.includes':'pyramid_debugtoolbar'}) # SETTING HERE WORKS!
with Configurator(settings=settings) as config:
config.include(common_config)
config.include('.routes')
config.scan()
return config.make_wsgi_app()
但是不这样...
def main(global_config,**settings):
""" This function returns a Pyramid WSGI application."""
with Configurator(settings=settings) as config:
config.add_settings({'pyramid.includes':'pyramid_debugtoolbar'}) # NO EFFECT!
config.include(common_config)
config.include('.routes')
config.scan()
return config.make_wsgi_app()
在documentation for pyramid.config中,我发现此警告,怀疑我正在处理以下内容:
可调用的配置应为接受单个的可调用 名为config的参数,它将是Configurator的一个实例。 但是,请注意,它将不是同一配置器实例 在其上调用此方法。由于以下原因而运行的代码 调用callable应该在传递的配置器上调用方法 给它添加配置状态。可调用的返回值 将被忽略。
为了猜测该解决方案,我尝试用config.add_settings(...)
和config.commit()
/ config.begin()
的各种组合包装config.end()
,但这些都不起作用。
我的问题:
如何使用config.add_settings(...)
来设置pyramid.includes
?我想在多个金字塔应用包含的common_config()
可调用对象中进行此操作。