Struts2+Freemarker 实现Django模板继承功能

阅读更多
最近在学习Django,对它的模板继承功能爱不释手,相比以前的使用过的Sitemesh来说,其功能、灵活性、易用性、复用性都比sitemesh高出一大截。
于是结合struts2+Freemarker做过的项目进行思考,原来用struts2+Freemarker也可以轻松做到Django模板的功能,几天试用下来,那不是一般的爽,sitemesh暂时放一边去吧。
以一个例子来说明
1. 首先定义模板,假设路径为: /webapps/exam/base.ftl, 定义基本布局


 
  <@title/>
 

 

Welcom

<#if content?exists> <@content/> <#if images?exists> <@images/> <#if comment?exists> <@comment/>


2003-2008 xxx.com. All rights reserved.



分为头、正文内容区域、图片区域、评论区域、尾,这是一个很简单的布局
2. 写一个简单的页面来测试,路径:/webapps/exam/simple.ftl,内容如下
<#include "/exam/base.ftl"/>

<#macro title>
测试


<#macro content>
蒂皮出版的《我的野生动物朋友》一书中,配有她的父母现场拍摄的130多幅照片,展现小女孩与各种凶残的非洲野生动物毫无顾忌玩耍的情景。这本书的广告称,这是又一个“狼孩”故事。


<#macro comment>

用户评论

Tom Say: very good


这个简单页面就完成了,在simple.ftl中我们不关心布局,爱怎么摆就怎么摆,浏览器中可以看到效果了。
3. 通过继承增强simple.ftl
现在用户的需求来了,要在书籍介绍下显示插图,可以直接修改上面的simple.ftl来实现,另外我们来看看继承simple.ftl来实现这个需求,添加一个文件:/webapps/exam/image-book.ftl,内容如下:
<#include "/exam/simple.ftl"/>

<#macro images>


现在来看看,很好,已经在原来的页面上加上了图片。

这个例子非常简单,只是为了说明如何实现模板继承,应用场景应该很多。项目中正在用,感觉很方便。

你可能感兴趣的:(Django,freemarker,出版,HTML,浏览器)