Web.py Cookbook 简体中文版 - 站点布局模板

本文介绍了一种在Web应用中实现模板继承的方法,通过使用base属性和render对象,可以使网站的所有页面共享同一套布局模板,同时提供了如何在子模板中传递变量及样式文件到父模板的具体实例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

问题

如何让站点每个页面共享一个整站范围的模板?(在某些框架中,称为模板继承,比如ASP.NET中的母版页)

方法

我们可以用 base 属性来实现:

render = web.template.render('templates/', base='layout')

现在如果你调用render.foo()方法,将会加载templates/foo.html 模板,并且它将会被templates/layout.html模板包裹。

“layout.html” 是一个简单模板格式文件,它包含了一个模板变量,如下:

$def with (content)
<html>
<head>
    <title>Foo</title>
</head>
<body>
$:content
</body>
</html>

在某些情况,如果不想使用基本模板,只需要创建一个没有base属性的reander对象,如下:

render_plain = web.template.render('templates/')

Tip: 在布局文件(layout.html)中定义的页面标题变量,如何在其他模板文件中赋值,如下:

templates/index.html
$var title: This is title.

<h3>Hello, world</h3>
templates/layout.html
$def with (content)
<html>
<head>
    <title>$content.title</title>
</head>
<body>
$:content
</body>
</html>

Tip: 在其他模板中引用css文件,如下:

templates/login.html
$var cssfiles: static/login.css static/login2.css

hello, world.
templates/layout.html
$def with (content)
<html>
<head>
    <title>$content.title</title>

    $if content.cssfiles:
        $for f in content.cssfiles.split():
            <link rel="stylesheet" href="$f" type="text/css" media="screen" charset="utf-8"/>

</head>
<body>
$:content
</body>
</html>

输入的HTML代码如下:

<link rel="stylesheet" href="static/login.css" type="text/css" media="screen" charset="utf-8"/>
<link rel="stylesheet" href="static/login2.css" type="text/css" media="screen" charset="utf-8"/>
 

转载于:https://www.cnblogs.com/justjavac/archive/2012/11/23/webpy-cookbook-layout-template.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值