Jinja2模版概述
Jinja2默认已经跟着Flask进行安装了,如果没有被安装到,可以通过pip install Jinja2来进行安装。
概要:
Jinja模板是简单的一个纯文本文件(html\/xml\/csv…),不仅仅是用来产生html文件,后缀名也依照你自己的心情而定。当然,尽量命名为模板正确的文件格式,增加可读性。先看一个简单例子:
1. <html lang="en">2. <head>3. <title>My Webpage</title>4. </head>5. <body>6. <ul id="navigation">7. {% for item in navigation %}8. <li><a href="{{ item.href }}">{{ item.caption }}</a></li>9. {% endfor %}10. </ul>11.12. {{ a_variable }}13. {{ user.name }}14. {{ user['name'] }}15.16. {# a comment #}17. </body>18.</html>
以上示例有需要进行解释:
- 第12~14行的
{{ ... }}:用来装载一个变量,模板渲染的时候,会把这个变量代表的值替换掉。并且可以间接访问一个变量的属性或者一个字典的key。关于点.号访问和[]中括号访问,没有任何区别,都可以访问属性和字典的值。 - 第7~9行的
{% ... %}:用来装载一个控制语句,以上装载的是for循环,以后只要是要用到控制语句的,就用{% ... %}。 - 第14行的
{# ... #}:用来装载一个注释,模板渲染的时候会忽视这中间的值。属性访问规则:
- 比如在模板中有一个变量这样使用:
foo.bar,那么在Jinja2中是这样进行访问的:- 先去查找
foo的bar这个属性,也即通过getattr(foo,'bar')。 - 如果没有,就去通过
foo.__getitem__('bar')的方式进行查找。 - 如果以上两种方式都没有找到,返回一个
undefined。
- 先去查找
- 在模板中有一个变量这样使用:
foo['bar'],那么在Jinja2中是这样进行访问:- 通过
foo.__getitem__('bar')的方式进行查找。 - 如果没有,就通过
getattr(foo,'bar')的方式进行查找。 - 如果以上没有找到,则返回一个
undefined。
- 通过
