Python Mako模版之頁面繼承

最近在重構自己的一個項目,於是將Django的模版轉換成mako的第三方模版,但是發現關於mako的文檔挺多,但是全都是英文的,看起來挺費力,但是這兒有一篇博文翻譯的不錯:http://blog.csdn.net/cdnight/article/details/43730371

關於頁面繼承,寫過比較大的項目大家應該都心有體會,爲了保證一個項目的風格統一,一般我們都會寫一個基本的模版,如網頁頭部,側邊欄,底部欄,因此造成了前端代碼冗餘量特別大,Django中的模版提供了頁面繼承的功能,因此我們可以將整個工程重複的代碼專門存放到一個頁面裏,然後在需要使用時,使用{% extends “file.html” %}和{% block blockname %}標籤來實現。
那麼,我們該怎樣通過mako實現呢?
mako裏面有inherit這個標籤,我們可以看一下他的官方文檔:
http://docs.makotemplates.org/en/latest/inheritance.html#using-include-with-template-inheritance
文檔看着不舒服,那下面給出例子,還是看例子吧:

//base.html

<!--**
 * Created by zhoupan on 3/22/17.
 **-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title><%block name="title"/></title>
</head>
<body>
        <%block name="main"/>
</body>
</html>

//index.html

<%inherit file="base.html"/>
<%block name="title"><%title%></%block>
<%block name="main">
    <h1>Hello World!</h1>
</%block> 

渲染結果:
//index.html

<!--**
 * Created by zhoupan on 3/22/17.
 **-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>index.html</title>
</head>
<body>
    <h1>Hello World!</h1>
</body>
</html>

這裏寫圖片描述

這就成功實現了頁面的繼承,但是文檔裏也講到了關於include也是可以實現頁面繼承的,他們之間有啥區別?下面看:

inherit和include的區別

//include.html

<%include file="base.html"/>
<%block name="title">include.html</%block>
<%block name="main">
    <h1>Hello World!</h1>
</%block>

渲染結果:
//include.html

<!--**
 * Created by zhoupan on 3/22/17.
 **-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

</body>
</html>
include.html

    <h1>Hello World!</h1>

這裏寫圖片描述

可能大家已經看出來區別了,inherit在實現頁面繼承的同時,可以對頁面內容進行動態的修改,如預先指定block,並在後面頁面對block進行填充,從而實現動態的進行內容的修改,而include只是將文本靜態的引入,無法對其內容進行後期更改。
下面時官方對於include的解釋:
http://docs.makotemplates.org/en/latest/inheritance.html#using-include-with-template-inheritance
這裏寫圖片描述

發佈了129 篇原創文章 · 獲贊 203 · 訪問量 45萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章