zoukankan      html  css  js  c++  java
  • freemarker 模板开发入门

    数据模型

    scalars标量:从根 root 開始指定它的路径,每级之间用点来分隔。

    如:whatnot.fruits

    sequences 序列:使用数组的方括号方式来訪问一个序列的子变量。

    如:animals[0].name,whatnot.fruits[1]

    总结:

    数据模型能够被看做是树状结构的。


    标量存储单一的值。这样的类型的值能够是字符串。数字,日期/时间或者是布尔值。
    哈希表是存储变量和与其相关且有唯一标识名称变量的容器。
    序列是存储有序变量的容器。

    存储的变量能够通过数字索引来检索,索引通常从零開始。 


    模板

    ${…}:FreeMarker 将会输出真实的值来替换花括号内的表达式,这种表达式被称为interpolations 插值.

    FTL tags 标签(FreeMarker 模板的语言标签):它们是 FreeMarker 的指令并且是不会直接输出出来的东西。这些标签的使用一般以符号#开头。(用户自己定义的 FTL 标签使用@符号来取代#)

    Comments 凝视:FreeMarker 的凝视和 HTML 的凝视相似,可是它用<#--和-->来分隔的。

    不论什么介于这两个分隔符(包括分隔符本身)之间内容会被 FreeMarker 忽略,就不会输出出来了。

     

    directives 指令:就是所指的 FTL 标签。这些指令在 HTML 的标签(如<table>和</table>)和 HTML 元素(如 table 元素)中的关系是同样的。

    (假设如今你还不能区分它们。那么把“FTL 标签”和“指令”看做是同义词就可以。



    指令演示样例

    1 if 指令

    <html> 
    <head> 
     <title>Welcome!</title> 
    </head> 
    <body> 
     <h1> 
     Welcome ${user}<#if user == "Big Joe">, our beloved 
    leader</#if>! 
     </h1> 
     <p>Our latest product: 
     <a href="${latestProduct.url}">${latestProduct.name}</a>! 
    </body> 
    </html>

    我们来具体说说 condition (条件推断)的使用:==是来推断在它两側的值相等的操作符,比較的结果是布尔值,true 或者 false。在==的左側,是引用的变量,我们非常熟悉这种语法。它会被变量的值来替代。

    右側是指定的字符串。在模板中的字符串必须放在引號内。
    使用<#else>标签能够指定当条件为假时程序运行的内容。

    <#if animals.python.price < animals.elephant.price> 
     Pythons are cheaper than elephants today. 
    <#else> 
     Pythons are not cheaper than elephants today. 
    </#if> 
    
    假设变量本身就是布尔值(true 或者 false),那么能够直接让其作为 if 的条件
    condition:
    <#if animals.python.protected> 
     Warning! Pythons are protected animals! 
    </#if> 
    

    2 list 指令
    当须要用列表来遍历集合的内容时,list 指令是很好用的。

    比如,假设在模板中用前面演示样例描写叙述序列的数据模型。 

    <p>We have these animals: 
    <table border=1> 
     <tr><th>Name<th>Price 
     <#list animals as being> 
     <tr><td>${being.name}<td>${being.price} Euros 
     </#list> 
    </table> 
    
    list 指令的一般格式为:
    <#list sequence as loopVariable>repeatThis</#list>
    repeatThis 部分将会在给定的 sequence 遍历时在每项中反复,从第一项開始,一个接着一个。在全部的反复中。loopVariable 将持有当前项的值。这个循环变量仅存在于<#list …>和</#list>标签之间。



    3 include 指令 

    使用 include 指令。我们能够在当前的模板中插入其它文件的内容。


    如果要在一些页面中显示版权声明的信息。那么能够创建一个文件来单独包括版权声明,之后在须要它的地方插入就可以。例如说,我们能够将版权信息单独存放在页面文件copyright_footer.html 中。


    <hr> 
    <i> 
    Copyright (c) 2000 <a href="http://www.acmee.com">Acmee 
    Inc</a>, 
    <br> 
    All Rights Reserved. 
    </i> 
    
    当须要用到这个文件时。能够使用 include 指令来实现插入。

    <html> 
    <head> 
     <title>Test page</title> 
    </head> 
    <body> 
     <h1>Test page</h1> 
     <p>Blah blah... 
    <#include "/copyright_footer.html"> 
    </body> 
    </html>

    4 联合使用指令

    <p>We have these animals: 
    <table border=1> 
     <tr><th>Name<th>Price 
     <#list animals as being> 
     <tr> 
     <td> 
     <#if being.size == "large"><font size="+1"></#if> 
     ${being.name} 
     <#if being.size == "large"></font></#if> 
     <td>${being.price} Euros 
     </#list> 
    </table> 

    5 处理不存在的变量 

    不论在哪里引用变量。都能够指定一个默认值来避免变量丢失这样的情况,通过在变量名后面跟着一个!和默认值。就像以下的样例。当 user 从数据模型中丢失时,模板将会将user 的值表示为字符串”Anonymous”。

    (若 user 并没有丢失,那么模板就会表现
    出”Anonymous”不存在一样): 

    <h1>Welcome ${user!"Anonymous"}!</h1> 
    
    当然也能够在变量名后面通过放置??来询问 FreeMarker 一个变量是否存在。将它和 if指令合并,那么假设 user 变量不存在的话将会忽略整个问候代码段: 

    <#if user?

    ?><h1>Welcome ${user}!</h1></#if>

    关于多级訪问的变量,比方 animals.python.price ,书写代码:animals.python.price!0,仅当 animals.python 存在而只最后一个子变量 price 可能不存在(这样的情况下我们如果价格是 0)。如果 animals 或者 python不存在,那么模板处理过程将会以“没有定义的变量”错误而停止。为了防止这样的情况的发生,能够这样来书写代码(animals.python.price)!0。这样的情况下当 animals 或
    python 不存在时表达式的结果仍然是 0。

    对于?

    ?

    也是相同用来的处理这样的逻辑的:
    animals.python.price?

    ?对照(animals.python.price)??

    来看。








  • 相关阅读:
    Python IDE
    python 3.x 不再提供raw_print()
    Python代码风格建议(转)
    在JSP页面中输出JSON格式数据
    MyEclipse 10 优化
    MB/GB/TB/PB/EB/ZB/YB/NB/DB/CB存储空间都是多大?如何换算?
    为什么民众不以偷税为耻_岑科
    彻底解剖人民币升值问题_岑科
    script 加载顺序问题的延展研究
    如何快速实现 markdown 转 HTML 文档?
  • 原文地址:https://www.cnblogs.com/clnchanpin/p/6744907.html
Copyright © 2011-2022 走看看