小筆記

問題
如何讓站點每個頁面共享一個整站范圍的模板?(在某些框架中,稱為模板繼承,比如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>
在某些情況,如果不想使用基本模板,只需要創(chuàng)建一個沒有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"/>

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容