在金字塔视图中使用自定义配置
Using Custom Configs in Pyramid Views
我正在学习 Pyramid,我正在尝试在我的一个视图中使用我的 development.ini 文件中的自定义配置。在这个例子中,"ldap_server".
development.ini:
[app:main]
use = egg:myapp
pyramid.reload_templates = true
pyramid.includes =
pyramid_debugtoolbar
ldap_server = 10.10.10.10
[server:main]
use = egg:waitress#main
listen = 0.0.0.0:6543
我发现我可以从 myapp/__init__.py
的主函数中访问 "ldap_server" 的值。 (下面的示例将在通过 pserve development.ini
启动时打印 "The ldap server is 10.10.10.10"。)
from pyramid.config import Configurator
def main(global_config, **settings):
config = Configurator(settings=settings)
config.include('pyramid_jinja2')
config.include('.routes')
config.add_static_view(name='static', path='myapp:static')
config.scan('.views')
config.scan('.templates')
ldap_server = settings.get('ldap_server')
print('The ldap server is ' + ldap_server)
return config.make_wsgi_app()
就是说,我想在我的一个视图中使用这个值。我正在努力寻找有关如何执行此操作的文档。我已经阅读了几篇文档,但仍然难以理解这一点。
文档:
具体来说,我试图了解要在我的视图中导入哪些金字塔函数,以及如何访问我在 development.ini 中定义的 'ldap_server' 值。
这是来自 myapp/views/login.py 的当前片段:
from pyramid.view import view_config, view_defaults
import ldap
@view_defaults(renderer='../templates/login.jinja2')
class TutorialViews(object):
def __init__(self, request):
self.request = request
self.view_name = 'login'
@view_config(route_name='login')
def login_page(self):
ldap_server = [ get value from development.ini ]
do ldappy stuff...
我已经搜索了几个小时,但不知道该怎么做。这似乎是一件微不足道的事情。如果有人可以给我一个如何执行此操作的示例,或者指出一些提供示例的文档,我将不胜感激。
更新:
下面是可行的解决方案 (login.py),以防像我这样的人(刚接触 Pyramid)以后遇到这个问题。只需更改一行。感谢谢尔盖在下面的回答中的解释。
from pyramid.view import view_config, view_defaults
import ldap
@view_defaults(renderer='../templates/login.jinja2')
class TutorialViews(object):
def __init__(self, request):
self.request = request
self.view_name = 'login'
@view_config(route_name='login')
def login_page(self):
ldap_server = self.request.registry.settings['ldap_server']
do ldappy stuff...
我认为您应该可以通过 request.registry.settings
:
访问它
If the settings argument is passed, it should be a Python dictionary
representing the deployment settings for this application. These are
later retrievable using the pyramid.registry.Registry.settings
attribute (aka request.registry.settings).
https://docs.pylonsproject.org/projects/pyramid/en/latest/api/config.html
我正在学习 Pyramid,我正在尝试在我的一个视图中使用我的 development.ini 文件中的自定义配置。在这个例子中,"ldap_server".
development.ini:
[app:main]
use = egg:myapp
pyramid.reload_templates = true
pyramid.includes =
pyramid_debugtoolbar
ldap_server = 10.10.10.10
[server:main]
use = egg:waitress#main
listen = 0.0.0.0:6543
我发现我可以从 myapp/__init__.py
的主函数中访问 "ldap_server" 的值。 (下面的示例将在通过 pserve development.ini
启动时打印 "The ldap server is 10.10.10.10"。)
from pyramid.config import Configurator
def main(global_config, **settings):
config = Configurator(settings=settings)
config.include('pyramid_jinja2')
config.include('.routes')
config.add_static_view(name='static', path='myapp:static')
config.scan('.views')
config.scan('.templates')
ldap_server = settings.get('ldap_server')
print('The ldap server is ' + ldap_server)
return config.make_wsgi_app()
就是说,我想在我的一个视图中使用这个值。我正在努力寻找有关如何执行此操作的文档。我已经阅读了几篇文档,但仍然难以理解这一点。
文档:
具体来说,我试图了解要在我的视图中导入哪些金字塔函数,以及如何访问我在 development.ini 中定义的 'ldap_server' 值。
这是来自 myapp/views/login.py 的当前片段:
from pyramid.view import view_config, view_defaults
import ldap
@view_defaults(renderer='../templates/login.jinja2')
class TutorialViews(object):
def __init__(self, request):
self.request = request
self.view_name = 'login'
@view_config(route_name='login')
def login_page(self):
ldap_server = [ get value from development.ini ]
do ldappy stuff...
我已经搜索了几个小时,但不知道该怎么做。这似乎是一件微不足道的事情。如果有人可以给我一个如何执行此操作的示例,或者指出一些提供示例的文档,我将不胜感激。
更新:
下面是可行的解决方案 (login.py),以防像我这样的人(刚接触 Pyramid)以后遇到这个问题。只需更改一行。感谢谢尔盖在下面的回答中的解释。
from pyramid.view import view_config, view_defaults
import ldap
@view_defaults(renderer='../templates/login.jinja2')
class TutorialViews(object):
def __init__(self, request):
self.request = request
self.view_name = 'login'
@view_config(route_name='login')
def login_page(self):
ldap_server = self.request.registry.settings['ldap_server']
do ldappy stuff...
我认为您应该可以通过 request.registry.settings
:
If the settings argument is passed, it should be a Python dictionary representing the deployment settings for this application. These are later retrievable using the pyramid.registry.Registry.settings attribute (aka request.registry.settings).
https://docs.pylonsproject.org/projects/pyramid/en/latest/api/config.html