如何从包含的可调用对象中使用config.add_settings({'pyramid.includes':...})

当我使用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()可调用对象中进行此操作。

money000000 回答:如何从包含的可调用对象中使用config.add_settings({'pyramid.includes':...})

pyramid.*的构造函数使用Configurator设置。这意味着需要在传递Configurator(settings=settings)之前设置它们。您可以先简单地修改这些设置,然后将它们传递给配置器。

本文链接:https://www.f2er.com/3134379.html

大家都在问