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万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章