首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从渲染器访问视图配置

从渲染器访问视图配置
EN

Stack Overflow用户
提问于 2019-06-27 00:28:47
回答 1查看 130关注 0票数 1

有没有办法从渲染器访问视图配置?通过视图配置,我指的是传递给view_config()装饰器的参数。我的目标是将一些设置添加到视图配置中,然后渲染器可以使用这些设置。

我有一个自定义的渲染器:

代码语言:javascript
复制
class MyRenderer(object):
    def __init__(self, info):
        pass

    def __call__(self, value, system):
        # Get view options.
        my_renderer_opts = ...

        # Render using options.
        ...

注册为:

代码语言:javascript
复制
config.add_renderer('my_renderer', MyRenderer)

在我看来,我有:

代码语言:javascript
复制
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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-06-27 07:57:38

如果你仍然想按照描述实现它,也许deriver会很有帮助:

代码语言:javascript
复制
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()
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56777330

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档