Когда я создал пирамидальное приложение по умолчанию из резца печенья, он привел к созданию файла 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()
вызываемой функции, которая включена в несколько приложений пирамиды.