python - 如何从包含的可调用对象中使用 config.add_settings({'pyramid.includes': ...})
问题描述
当我从一个千篇一律的工具创建一个默认的金字塔应用程序时,它会生成一个包含如下部分的 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
现在我正在尝试在 python 代码中添加这些相同的设置,而是使用 中的Configurator
对象__init__.py
,我发现以下内容似乎工作相同:
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()
在pyramid.config 的文档中,我发现这个警告我怀疑是我正在处理的:
配置可调用对象应该是接受名为 config 的单个参数的可调用对象,该参数将是 Configurator 的一个实例。但是,请注意,它与您调用此方法的配置器实例不同。由于调用可调用对象而运行的代码应该调用传递给它的配置器上的方法,这些方法会添加配置状态。可调用的返回值将被忽略。
为了猜测解决方案,我尝试用和/config.add_settings(...)
的各种组合包装我的,但这些都不起作用。config.commit()
config.begin()
config.end()
我的问题:
如何使用config.add_settings(...)
来设置pyramid.includes
?我想在common_config()
多个金字塔应用程序包含的可调用对象中执行此操作。
解决方案
这些pyramid.*
设置由Configurator
的构造函数使用。这意味着它们需要在传递之前设置Configurator(settings=settings)
。您可以先简单地修改这些设置,然后将它们传递给配置器。
推荐阅读
- algorithm - Modelica:将数组返回值分配给标量
- c# - 如何将更新的列表传递给控制器?
- java - Java regex:查找字母数字组合的序列,允许某些符号
- python - Maya python commands to Maya api: modelEditor settings
- c# - Correct way to enable and disable voice recording via Bluetooth headset on Xamarin.Android
- android - Autofill in Android Oreo not working when app handles localization
- java - When I send a socket request to nginx, the request from nginx is not balanced to socket server
- ionic3 - File-Encryption is not working in ionic 3
- visual-studio - Depend on DLL without header file, worked in Visual Studio 2005
- mysql - How can I Insert data to my table from a comma separated text?