freemarker 模板中定义变量

在模板中可以定义三种类型的变量:

  • 简单变量:它能从模板中的任何位置来访问,或者从使用 include 指令引入的模板访问。可以使用 assign 或 macro 指令来创建或替换这些变量。
  • 局部变量:它们只能被设置在宏定义体内,而且只在宏内可见。一个局部变量的生存周期只是宏的调用过程。可以使用 local 指令在宏定义体内创建或替换局部变量。
  • 循环变量:循环变量是由指令(如 list )自动创建的,而且它们只在指令的开始和结束标记内有效。宏的参数是局部变量而不是循环变量。

示例:使用 assign 创建和替换变量

<#assign x = 1> <#-- 创建变量 x -->
${x}
<#assign x = x + 3> <#-- 替换变量 x -->
${x}
1
4

局部变量也会隐藏(不是覆盖)同名的简单变量。循环变量也会隐藏(不是覆盖)同名的局部变量和简单变量。例如:

<#assign x = "plain">
1. ${x} <#-- 这里是普通变量 -->
<@test/>
6. ${x} <#-- 普通变量的值没有被改变 -->
<#list ["loop"] as x>
  7. ${x} <#-- 现在循环变量隐藏了普通变量 -->
  <#assign x = "plain2"> <#-- 替换普通变量, 隐藏在这里不起作用-->
  8. ${x} <#-- 它仍然隐藏普通变量 -->
</#list>
9. ${x} <#-- 普通变量的新值 -->
<#macro test>
  2. ${x} <#-- 这里我们仍然看到的是普通变量 -->
  <#local x = "local">
  3. ${x} <#-- 现在局部变量隐藏了它 -->
  <#list ["loop"] as x>
    4. ${x} <#-- 现在循环变量隐藏了局部变量 -->
  </#list>
  5. ${x} <#-- 现在又可以看到局部变量了 -->
</#macro>
1. plain
 2. plain
 3. local
  4. loop
 5. local
6. plain
 7. loop
 8. loop
9. plain2

注意到循环变量的设置是通过指令调用时创建的(本例中的 <list ...> 标签)。没有其他的方式去改变循环变量的值(也就是说你不能使用定义指令来改变它的值。)。从上面的示例来看,尽管也可以使用一个循环变量来隐藏另外一个。

有时会发生一个变量隐藏数据模型中的同名变量,但是如果想访问数据模型中的变量,就可以使用特殊变量 globals 。例如,假设我们在数据模型中有一个名为 user ,值为”BigJoe”的变量。

<#assign user = "Joe Hider">
${user}
<#-- 打印: Joe Hider -->
${.globals.user} <#-- 打印: Big Joe -->

freemarker 模板中定义变量

时间: 2024-12-13 12:58:25

freemarker 模板中定义变量的相关文章

django 模板中通过变量替代key取字典内容

模板中通过变量替代key取字典内容 templatetags/├── get_item.py├── __init__.py ###get_item.py # coding=utf-8 from django import templatefrom django.utils.safestring import mark_safefrom django.template.base import resolve_variable, Node, TemplateSyntaxError register

case中定义变量

1.c语言switch/case中定义变量 case 0: int b = 0 ; printf("0");break; case 1: printf("1");break; default: printf("default");break; C和C++都会报错 情况1: case 0: int b; b = 0 ; printf("0");break; case 1: printf("1");break;

关于在freemarker模板中遍历数据模型List&lt;JavaBean&gt;的经验

本文采用简单的servlet作为后台处理数据的工具,前台使用freemarker的ftl模板作为输出工具,简单说明怎样将封装有实体类对象的List集合注入到ftl模板中并且成功的在遍历显示出来,之前在网上找了很多这方面的资料,但是都没有解决这个问题,所以自己就从头认真的研读的一番freemarker的API文档,阅读了相关的类和接口的功能说明,终于找到了突破口,在这里写出来供和我有相同经历的孩纸(初学者)使用: 首先看我写的domain实体类:News.java public class New

yii模板中常用变量总结

yii模板中常用的一些变量总结. 现有这样一个url:http://www.phpernote.com/demos/helloworld/index.php/xxx/xxx 则通过如下方式获取的值对应分别为: 除域名外的首页地址 echo Yii::app()->user->returnUrl;  //  '/demos/helloworld/index.php' 当前页面url echo Yii::app()->request->url;  //  '/demos/hellowo

关于在头文件中定义变量的问题

如果在一个头文件中定义了一个变量 A.h: int i; 在A.cpp,B.cpp...文件中包含了这个头文件,编译时就会产生重复定义的错误.问题所在是因为int i;这句代码是定义了一个i变量,包含一次头文件就定义了一次i,包含多次肯定引起错误.如果改成extern int i;这句代码就变成了一个声明了.并不会定义i这个变量.不过在多个cpp文件里初始化一样会出现错误.只能在一个cpp文件中进行初始化.

c语言头文件中定义变量

最近在看一个PHP的扩展源码,编译的时候的遇到一个问题: ld: 1 duplicate symbol for architecture x86_64 仔细看了一下源码,发现在头文件中 出现了全局变量的定义 ZEND_DECLARE_MODULE_GLOBALS(xx) 简单开来,可以这么理解 // t1.h #ifndef T1_H #define T1_H int a = 0; #endif //------------------ //t1.c #include "t1.h" #

django 模板中定义临时列表

<ul class="num_t clr"> {% for obj in ""|ljust:"10" %} <li>{{ forloop.counter }}</li> {% endfor %} </ul> 官网是这样使用: ljust Left-aligns the value in a field of a given width. Argument: field size For exampl

在properties.xml中定义变量,在application.xml中取值问题

如果为application.xml中的变量赋默认值,同时又在properties.xml中变量赋值,而加载后是取不到properties.xml中的值的问题. 解决这个问题需要加上黑体部分配置: <bean id="sysConfiguration" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">        <property na

如何在switch case中定义变量(不用花括号)

这个周末有幸见到了几位神交已久的库友(天天/迪迪/丁丁),大家一起扯了些有的没的,很开森! 天天考了我一个问题,在C语言里面,如何在switch case中定义一个变量?要求是不用花括号. 这个问题是背景是,下面的代码是编译不过的,因为在case后面不能直接定义变量. switch (v) {    case 1:       int a;       get_value_of_xx(&a);       set_yy(a);       break;    case 2:       //do