有没有办法从渲染器访问视图配置?通过视图配置,我指的是传递给view_config()装饰器的参数。我的目标是将一些设置添加到视图配置中,然后渲染器可以使用这些设置。
我有一个自定义的渲染器:
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.__call__()
传递到view_config()
的my_renderer_opts
发布于 2019-06-27 07:57:38
如果你仍然想按照描述实现它,也许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()
https://stackoverflow.com/questions/56777330
复制相似问题