最近入坑flask,jinja2作为其默认支持的模板语言,绝对值得一学。
本文适合还未接触想快速尝试一下(不想看官文)的同学。
官方文档:http://docs.jinkan.org/docs/jinja2/
1. 是什么
是什么:jinja2是Flask默认支持的模板引擎,它的主要作用是渲染模板
2. 怎么用
一个最简单的入门程序, 它包含两部分
1.test.py
# 1.导入依赖包
from flask import Flask, render_template
# 2.实例化app
app = Flask(__name__)
# 3.映射,默认情况下flask从templates文件夹中寻找模板文件(index.html)
@app.route('/')
def index():
return render_template('index.html')
@app.route('/user/<param>')
def user(name):
return render_template('index.html', param=param)
2.templates/index.html
接收变量(过滤),变量写在{{ }}中
....
<body>
{{ param|safe }}
<body>
...
- 注:其中’|‘后面加过滤器
- Jinja2变量过滤器:
- safe: 渲染时不转义
- capitalize:把值的首字母转换成大写,其他字母转换成小写
- lower: 把值转换成小写形式
- upper: 把值转换成大写形式
- title: 把值中每个单词的首字母都转换成大写
- trim: 把值的首尾空格都去掉
- striptags: 渲染之前把值中所有的HTML标签都删掉
!添加的逻辑代码,写在{% %}中
- 定义变量&逻辑循环
{% set links=[
{'label':'home','href':url_for('.index')},
{'label':'home','href':url_for('.about')},
{'label':'home','href':url_for('.services')},
{'label':'home','href':url_for('.projects)},
]%}
<nav>
{% for link in links %}
<a href="{{ link.href }}">{{ link.label }}</a>
{% endfor %}
</nav>
3. 一些高级玩法
- 3.1 继承
<!--此处继承了bootstrap-->
{% extends 'bootstrap/base.html' %}
<!--定义自己的模块-->
{% block title %}
*****自定义内容
{% endblock %}
<!--修改父模块内容-->
{% block head %}
{{ super() }}
******自定义内容
{% endblock %}
<!--包含子页-->
<% block head %>
<% include 'includes/head.html' %>
<% include ['includes/head.html','includes/head2.html'] %>
<% endblock head %>
- 3.2 宏
<!--定义宏-->
{% marco input(name,type='text',value='',size=20) %}
<input type="{{ type }}"
name="{{ name }}"
value="{{ value }}"
size="{{ size }}"
/>
{% endmarco %}
<!--调用宏-->
{{ input('username')}}
{{ input('password',type='password')}}
如果宏比较多,可以抽到单独的html中,再import进来
{% import '_marcos.html' as ui%}
...
{{ ui.input('username')}}