1 模板的创建
模板文件结构:
project/ templates/ 模板文件
跳转模板一般使用:
from flask import render_template,render_template_string
render_template
return render_template('index.html') #将index.html页面的内容读取出来并进行响应
render_template_string
return render_template_string('index
') #可以执行html标签语句
2 flask模板引擎Jinja2语法:
概述: 模板类似于MVC模式下的view视图层,模板引擎其实就是用来将模板同业务代码分离,并解析模板语言的程序.
比如模板代码
Hello template {% if name %}Hello { { name }}!
{% else %}Hello flask!
{% endif %}
从上面例子可以发现:
模板表达式是包含在分割符{
{ }}内模板控制语句都是包含在分割符{% %}中
模板注释都是包含在分隔符{# #}中
变量 : 视图传递过来的数据
{
{ 变量名称 }}标签 : 就是python中的循环\分支结构...
{% 标签名称 %}
(1)表达式一般分为以下几种:
表达式种类 | 举例 |
---|---|
变量(最常用) | { { name }} |
基础类型( 字符串,数值,列表,元祖,字典,布尔值) | 一般配合表达式使用{ { 'string' }} |
运算表达式(算术与逻辑) | { { False and True }} { { 2 + 3 }} |
过滤器' | ' ,测试器' is ' | 一般配合表达式 |
函数调用 | { { func( ) }} |
“in”操作符 | { { 1 in [1,2,3] }} |
字符串连接符”~” | { { ~'like'~ }} |
(2)控制语句一般有:
- {% for user in users if not user.hidden %} {% if loop.first %} # 第一次if判定
- User No { { loop.index }}:
- { { user.name }}
User List:
{% endif %} Total Users: { { loop.length }}
{% endif %}{% else %} #都不满足执行else if elif else
{% if data.bool %} { { data.bool }}为真{% elif data.none %} { { data.none }}为真{% else %} 以上都为假{% endif %}
for in 循环
{% for k,v in data.items() %}
和else搭配
{% for in %} ...{% else %} ...{% endfor %}
注意 : 当进行迭代的对象不存在时 则执行else
Jinja2的循环内置变量获取当前迭代状态:
变量 | 描述 |
---|---|
loop.index | 获取当前迭代的索引,从1开始 |
loop.index0 | 获取当期迭代的索引 从0开始 |
loop.first | 是否为第一次迭代,返回True或者False |
loop.last | 是否为最后一次迭代 返回True或者False |
loop.length | 迭代的长度 |
loop.depth | 当前循环在递归中的层级(从1开始) |
loop.depth0 | 当前循环在递归中的层级(从0开始) |
(3)忽略,转义,赋值
{% raw %}#忽略模板语法
- {% for k,v in items %}
- { { k,v }} {% endfor %}
Hello { { name }}!
{% endautoescape %}{% set items = [1,5] %} #使用set关键字给变量赋值3 模板变量函数
(1) 请求对象request : 它本身是一个字典,dict['key'] 或者是dict.get['key']
表达式 | 含义 |
---|---|
request.method | 获取请求的方法,post get |
request.form | 获取表单数据 |
request.args | 请求的参数 |
request.url | 获取完整的请求url |
request.base_url | 获取去掉传参的url |
request.host_url | 获取主机名部分的url |
request.files | 获取form表单文件上传的数据 |
request.cookies | 获取cookie信息 |
request.headers | 获取请求头信息 |
(2) 会话对象session:本身也是一个字典
session['user'] = u'张三'设置session需要设置秘钥app.secret_key = '123456' 或者在配置文件 app.config['SECRET_KEY'] = '123456'
(3) url_for()函数:通过视图找到路由
(4) with与set
#set 添加变量{% set name='张三' %}#set也可赋值给列表或元组{% set navigation = [('index.html', 'Index'), ('about.html', 'About')] %}
with语句可以创建内部作用域,主要是起到隔离作用
#在with该作用域下可以使用{% with num = 42 %}{ { num }}{% endwith %}