最近在重构自己的一个项目,于是将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