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行的{# ... #}:用来装载一个注释,模板渲染的时候会忽视这中间的值。

属性访问规则:

  1. 比如在模板中有一个变量这样使用:foo.bar,那么在Jinja2中是这样进行访问的:
    • 先去查找foobar这个属性,也即通过getattr(foo,'bar')
    • 如果没有,就去通过foo.__getitem__('bar')的方式进行查找。
    • 如果以上两种方式都没有找到,返回一个undefined
  2. 在模板中有一个变量这样使用:foo['bar'],那么在Jinja2中是这样进行访问:
    • 通过foo.__getitem__('bar')的方式进行查找。
    • 如果没有,就通过getattr(foo,'bar')的方式进行查找。
    • 如果以上没有找到,则返回一个undefined

数据类型和运算符

数据类型:

Jinja支持许多数据类型,包括:字符串、整型、浮点型、列表、元组、字典、True/False

运算符:

  • +号运算符:可以完成数字相加,字符串相加,列表相加。但是并不推荐使用+运算符来操作字符串,字符串相加应该使用~运算符。
  • -号运算符:只能针对两个数字相减。
  • /号运算符:对两个数进行相除。
  • %号运算符:取余运算。
  • *号运算符:乘号运算符,并且可以对字符进行相乘。
  • **号运算符:次幂运算符,比如2**3=8。
  • in操作符:跟python中的in一样使用,比如true返回true
  • ~号运算符:拼接多个字符串,比如HelloWorld将返回HelloWorld

静态文件的配置

Web应用中会出现大量的静态文件来使得网页更加生动美观。静态文件主要包括有CSS样式文件、JavaScript脚本文件、图片文件、字体文件等静态资源。在Jinja中加载静态文件非常简单,只需要通过url_for全局函数就可以实现,看以下代码:

<link href="{{ url_for('static',filename='about.css') }}">

url_for函数默认会在项目根目录下的static文件夹中寻找about.css文件,如果找到了,会生成一个相对于项目根目录下的/static/about.css路径。当然我们也可以把静态文件不放在static文件夹中,此时就需要具体指定了,看以下代码:

app = Flask(__name__,static_folder='/tmp')

那么访问静态文件的时候,将会到/tmp这个文件夹下寻找。

最后修改:2020年7月9日 09:01