gpt4 book ai didi

python - 将 Pyramid 中多个 View 的渲染内容注入(inject)到一个基本模板中

转载 作者:太空宇宙 更新时间:2023-11-04 01:36:30 25 4
gpt4 key购买 nike

我想做如下的事情。

我配置了以下路由:

config.add_route('home', '/')
config.add_route('foo', '/foo')

以下观点:

@view_config(route_name='home', renderer='templates/home.pt')
def home_view(request):
return {...}

@view_config(route_name='foo', renderer='templates/foo.pt')
def foo_view(request):
return {...}

有一个基本模板'templates/base.pt':

<!DOCTYPE html>
<html>
<head></head>
<body>
Welcome ${user_id}<br>
<a href="/foo">Foo</a><br>
<div id="content">
<!-- Inject rendered content here from either / or /foo -->
</div>
</body>
</html>

现在,在我看来,我想将以下内容注入(inject)到 ID 为“content”的 div 中:

<!-- templates/home.pt -->
<div id="home-content">Home content</div>

<!-- templates/foo.pt -->
<div id="foo-content">Foo content</div>

我将如何更改上面的 home_viewfoo_view 以便它们可以将自己的模板(home.pt、foo.pt)注入(inject) base.pt?我还需要以某种方式将 ${user_id} 等数据传输到 base.pt 中。在定义我的 View 时,我一直在研究 wrapper 参数,但无法弄清楚它是如何工作的。

最佳答案

您可以通过多种方式实现这一点(参见例如 Using ZPT Macros in PyramidChameleon documentation introduction )。

在您的简单情况下,我认为这是最快的方法:首先,将您的 base.pt 文件更改为:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal">
<head></head>
<body>
Welcome ${user_id}<br>
<a href="/foo">Foo</a><br>
<div id="content">
<tal:block metal:define-slot="content">
</tal:block>
</div>
</body>
</html>

这定义了 Chameleon 宏的 content 槽。

您的 foo.pt 可能如下所示:

<metal:main
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
use-macro="load: base.pt">
<tal:block metal:fill-slot="content">
<div id="foo-content">Foo content</div>
</tal:block>
</metal:main>

注意 use-macro="load: base.pt 行。home.pt 应该遵循相同的模式。user_id 和其他模板变量可用于宏,因此,例如,如果将 user_id 设置为 USER/foo 将呈现:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head></head>
<body>
Welcome USER<br>
<a href="/foo">Foo</a><br>
<div id="content">
<div id="foo-content">Foo content</div>
</div>
</body>
</html>

关于python - 将 Pyramid 中多个 View 的渲染内容注入(inject)到一个基本模板中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9290150/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com