1.引言
本文中小结了Twig模板的入门级的基本使用(仅适合入门),更多详细的使用方法可以访问:http://twig.sensiolabs.org/doc/2.x/ (英文) 来进行学习研究。
2.Twig——模板引擎
1. {% ... %}和{{ ... }}
第一种是用来控制的,比如for循环;第二种是用来输出变量和表达式的。
2. 输出变量。如输出$hello: {{hello}}
3. 如传递给模板的是对象或者数组,可使用点 . 来输出对象的属性或者方法,或者数组的成员,或者可以使用下标的方式。
{{ foo.bar }}
{{ foo.[‘bar‘] }}
返回的值不存在就会返回null;
4. for.bar在模板中会进行以下的操作
。。。如果foo是个数组,就尝试返回bar成员,如果不存在的话,往下继续;
。。。如果foo是个对象,会尝试返回bar属性,如果不存在的话,往下继续;
。。。会尝试运行bar方法,如果不存在的话,往下继续;
。。。会尝试运行getBar方法,如果不存在的话,往下继续;
。。。会尝试运行isBar方法,如果不存在的话,返回null。
for['bar'] —— for必须是个数组,尝试返回bar成员,如果不就返回null
5. twig中的全局变量
_self 这个参看macro标签
_context 这个就是当前的环境
6. 变量赋值——具体参见set标签
{% set foo = 'foo' %}
{% set foo = [1, 2] %}
{% set foo = {'foo': 'bar'} %}
7. 过滤器 filter
变量可以被过滤器修饰;过滤器和变量用(|)分割开;过滤器也是可以有参数的;过滤器也可以被多重使用。
8. 函数 function
Twig有一些内置函数,例如返回0到3的数组就可以用到range函数:
{% for i in range(0, 3) %}
{{ i }},
{% endfor %}
9. 流程控制 —— 支持 for循环 和 if/else if/eise 结构
例:
<h1>Members</h1>
<ul>
{% for user in users %}
<li>{{ user.username | e }}</li>
{% endfor %}
</ul>
10. 注释 —— 使用{{#...#}},注释掉包围的内容,可以注释单行或多行
11. 载入其它模板
i.详见include标签,会返回经过渲染的内容到当前的模板里
例如:{% include 'sidebar.html' %}
ii.当前模板的变量也会传递到被include的模板里,在那里面可以直接访问你这个模板的变量。例如:
{% for box in boxes %}
{% include "render_box.html" %}
{% endfor %}
在render_box.html中是可以访问box变量的;
加入其他参数可以使被载入的模板只访问部分变量,或者完全访问不到。
12. 模板继承
i.TWIG中最有用到功能就是模板继承,他允许你建立一个“骨骼模板”,然后你用不同到block来覆盖父模板中任意到部分。而且使用起来非常到简单。
ii.我们先定义一个基本页base.html他包含许多block块,这些都可以被子模板覆盖。
iii.下面定义了4个block块,分别是block head, block title, block content, block footer
base.htmliv.注意
1.block是可以嵌套的
2.block可以设置默认值(中间包围的内容),如果子模板里没有覆盖,那就直接显示默认值。比如block footer,大部分页面你不需要修改(省力),但你需要到时候仍可以方便到修改(灵活)
子模板13. 子模板的定义
注意:{% extends "base.html" %}必须是第一个标签。
其中block footer就没有定义,所以显示父模板中设置的默认值。
需要增加一个block的内容,而不是全覆盖,你可以使用parent函数
extends标签只能有一个,所以你只能有一个父模板;但有种变通到方法来达到重用多个模板到目的,具体参见手册的use标签。
14. HTML转义
i.主要是帮助转义尖括号等 <, >, &, "
可以有两种办法。一种是用标签,另一种是使用过滤器。
因为 {{ 是TWIG的操作符,如果你需要输出两个花括号,最简单到办法就是
{{ '{{' }}
还可以使用raw标签和raw过滤器,详细参考手册
15. macros 宏
宏有点类似于函数,常用于输出一些html标签。
这里有个简单示例,定义了一个输出input标签的宏。
宏参数是没有默认值的,但你可以通过default过滤器来实现。
3.结语
上面关于Twig的一些使用的方法,对于初学Twig的朋友们来说还是有点用处的。
当然,有更多需要请百度,毕竟万事不解问百度,是我们一贯秉承的传统。
本人随笔,一是希望可以给有需要的人提供一些帮助,再者是在以后的开发过程中遇到同类的问题,可以来回头看一看。
此致,撒花!!!
网友评论