Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 金字塔中模板上下文的等效项(挂架用户)_Python_Pylons_Pyramid - Fatal编程技术网

Python 金字塔中模板上下文的等效项(挂架用户)

Python 金字塔中模板上下文的等效项(挂架用户),python,pylons,pyramid,Python,Pylons,Pyramid,金字塔中模板上下文的等价物是什么 金字塔中的IBeforeRender事件与此有关吗?我已经阅读了官方文档,但很难理解IBeforeRender事件到底是什么。Pyramid并没有真正向开发人员公开“模板上下文”(尽管它在Pyramid的各种模板引擎绑定中内部使用) 通常,如果要将某些内容填充到“c”中以便在模板中使用,只需将其作为关键字参数传递给render_to_response()调用,或者作为dict的一部分传递给预定义的呈现器即可 因此,要做一些类似于您所做的事情: @view_con

金字塔中模板上下文的等价物是什么


金字塔中的IBeforeRender事件与此有关吗?我已经阅读了官方文档,但很难理解IBeforeRender事件到底是什么。

Pyramid并没有真正向开发人员公开“模板上下文”(尽管它在Pyramid的各种模板引擎绑定中内部使用)

通常,如果要将某些内容填充到“c”中以便在模板中使用,只需将其作为关键字参数传递给render_to_response()调用,或者作为dict的一部分传递给预定义的呈现器即可

因此,要做一些类似于您所做的事情:

@view_config(renderer="greeting.mako")
def index(request):
    return {'name': 'Pyramid Developer'}
和greeting.mako:

<html>
<head>
    <title>Greetings</title>
</head>
<body>
    <h1>Greetings</h1>
    <p>Hello ${name}!</p>
</body>
</html>

问候语
问候语
你好${name}


如果您希望得到一些“全局包”,在其中可以填充每个模板都可用的变量,那么您关于IBeforeRender的问题是合适的

from pyramid.events import subscriber
from pyramid.events import BeforeRender

@subscriber(BeforeRender)
def add_global(event):
    event['name'] = 'Pyramid Developer'

在设置配置程序时,还有一种添加全局变量的替代方法。您可以在以下位置看到完整信息:

Pyramid已经在其请求对象上提供了一个
tmpl\u上下文
,因此您只需订阅一个
BeforeRender
事件即可将其添加到渲染器全局:

def add_renderer_globals(event):
    event['c'] = request.tmpl_context
    event['tmpl_context'] = request.tmpl_context

config.add_subscriber(add_renderer_globals, 'pyramid.events.BeforeRender')
从现在起,当您收到请求时,可以在代码中设置参数:

request.tmpl_context.name = 'Bob'
随后,您的模板可能会引用
名称
变量:

${ c.name }

如果您正在寻找一个全局字典来方便地在模板和视图之间来回传递变量,请使用pyramid.request.TemplateContext

在模板页面上:

<%!
    from pyramid.request import TemplateContext as c
    c.foo = 123
%>

这或多或少应该相当于塔架中的tmpl_上下文

在我看来,上面的解决方案并不完全复制Pylons模板上下文的行为。如果在挂架中呈现页面请求并向上下文
c
添加一些值
a
,则可以在模板中以
c.a
的形式访问该请求。但是,如果其中一个提交另一个请求,则该键/值将被删除

上面的金字塔解显示了另一种行为。键/值
c.a
将保留在模板上下文中。有时,这是不可取的。有什么建议可以解决这个差异吗?

来自金字塔食谱的一节:

Pylons有几个幻球,其中包含 当前请求。以下是最接近的金字塔等价物:

(……)

pylons.tmpl_上下文

请求本地数据的临时对象,通常用于传递变量 添加到模板。在金字塔中,您返回一个变量的dict,并让 渲染器将它们应用于模板。也可以渲染模板 查看代码中的您自己

如果视图是一个方法,还可以设置实例变量。景色 实例在模板中显示为
视图
。有两种主要用途CSE 为了这个。第一,为网站模板设置变量 否则必须在每个返回指令2中,对于 特定于HTML呈现,当视图同时向 HTML呈现程序和非HTML呈现程序(例如JSON)

金字塔在
请求处有一个“tmpl\u context”端口。tmpl\u context
, 它在模板中显示为
c
。然而,它从未在中国流行 金字塔塔架已与用户连接,不再有文档记录


奇怪的问题…iBeforRender与模板上下文有什么关系?对不起,我认为它可能相当于金字塔中的模板上下文,但我想这是另外一回事。请在派勒邮件列表上寻求派勒人的帮助。请选择合理的主题——这个主题太笼统,对吸引注意力没有多大帮助!请注意,他“全球袋”是g在塔架。这与每请求上下文tmpl_context/c不同。您的回复非常有用。非常感谢。
Request.tmpl\u context
不再被记录,它已经在模板中显示为
c
–请参见my.Yes,而不是在呈现前使用全局事件
将请求特定的变量传递给呈现器,或者在直接呈现响应时使用它们。在Pyramid中,返回变量的dict,并让渲染器将它们应用于模板。或者您可以在视图代码中自己呈现模板来自金字塔食谱的一节。
from pyramid.request import TemplateContext as c