Python 从渲染器访问视图配置
有没有办法从渲染器访问视图配置?我所说的视图配置是指传递给装饰器的参数。我的目标是向视图配置添加一些设置,渲染器可以使用这些设置 我有一个自定义渲染器:Python 从渲染器访问视图配置,python,python-3.x,pyramid,Python,Python 3.x,Pyramid,有没有办法从渲染器访问视图配置?我所说的视图配置是指传递给装饰器的参数。我的目标是向视图配置添加一些设置,渲染器可以使用这些设置 我有一个自定义渲染器: class MyRenderer(object): def __init__(self, info): pass def __call__(self, value, system): # Get view options. my_renderer_opts = ...
class MyRenderer(object):
def __init__(self, info):
pass
def __call__(self, value, system):
# Get view options.
my_renderer_opts = ...
# Render using options.
...
注册为:
config.add_renderer('my_renderer', MyRenderer)
在我看来,我有:
class Page(object):
def __init__(self, request):
self.request = request
@pyramid.view.view_config(
route_name='root',
renderer='my_renderer',
my_renderer_opts={...}
)
def view(self):
pass
是否有方法访问从
MyRenderer>传递到view\u config()
的my\u renderer\u opts
。\uuu调用
?如果仍要按说明实现它,可能deriver
将非常有用:
from wsgiref.simple_server import make_server
from pyramid.view import view_config
from pyramid.config import Configurator
@view_config(route_name="hello", renderer="myrend", renderer_options={"a": 1})
def hello_world(request):
return "Hello World!"
def rendereropt_deriver(view, info):
options = info.options.get("renderer_options", {})
def wrapped(context, request):
setattr(request, "_renderer_options", options)
return view(context, request)
return wrapped
rendereropt_deriver.options = ("renderer_options",)
class MyRendererFactory:
def __init__(self, info):
self.info = info
def __call__(self, value, system):
options = getattr(system["request"], "_renderer_options", {})
print("`renderer_options` is {}".format(options))
return value
if __name__ == "__main__":
with Configurator() as config:
config.add_route("hello", "/")
config.add_view_deriver(rendereropt_deriver)
config.add_renderer("myrend", MyRendererFactory)
config.scan(".")
app = config.make_wsgi_app()
server = make_server("0.0.0.0", 8000, app)
server.serve_forever()
my\u renderer\u opts
可以通过视图谓词添加,渲染器可以访问请求/视图/视图名称等,检查pyramid.interfaces.RendererHelper.render\u View
,谓词在视图中可用。\uu谓词\uu
@slavonic如何使用谓词添加my\u renderer\u opts
?我以前使用过谓词,但在此上下文中没有。我一直在寻找RendererHelper
的源代码,但运气不好system['view']
是Page
的一个实例,但它没有\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu>属性(在一个实际有谓词的视图上进行测试,与我的示例不同)