Flask入门模板Jinja2语法与函数(四)
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('<h1>index</h1>') #可以执行html标签语句
2 flask模板引擎Jinja2语法:
概述: 模板类似于MVC模式下的view视图层,模板引擎其实就是用来将模板同业务代码分离,并解析模板语言的程序.
比如模板代码
<!doctype html>
<title>Hello template</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello flask!</h1>
{% endif %}
从上面例子可以发现:
模板表达式是包含在分割符{{ }}内
模板控制语句都是包含在分割符{% %}中
模板注释都是包含在分隔符{# #}中
变量 : 视图传递过来的数据
{{ 变量名称 }}
标签 : 就是python中的循环\分支结构...
{% 标签名称 %}
(1)表达式一般分为以下几种:
| 表达式种类 | 举例 |
|---|---|
| 变量(最常用) | {{ name }} |
| 基础类型( 字符串,数值,列表,元祖,字典,布尔值) | 一般配合表达式使用{{ 'string' }} |
| 运算表达式(算术与逻辑) | {{ False and True }} {{ 2 + 3 }} |
| 过滤器' | ' ,测试器' is ' | 一般配合表达式 |
| 函数调用 | {{ func( ) }} |
| “in”操作符 | {{ 1 in [1,2,3] }} |
| 字符串连接符”~” | {{ 'like' }} |
(2)控制语句一般有:
<dl>
{% for user in users if not user.hidden %}
{% if loop.first %} # 第一次if判定
<div>User List:</div>
{% endif %}
<div class="{{ loop.cycle('odd', 'even') }}">
<dt>User No {{ loop.index }}:</dt>
<dd>{{ user.name }}</dd>
</div>
{% if loop.last %} #最后一次if判定
<div>Total Users: {{ loop.length }}</div>
{% endif %}
{% else %} #都不满足执行else
<li>No users found</li>
{% endfor %}
</dl>
if elif else
{% if data.bool %}
{{ data.bool }}为真
{% elif data.none %}
{{ data.none }}为真
{% else %}
以上都为假
{% endif %}
for in 循环
{% for k,v in data.items() %}
<li>{{ foo }}</li>
<li>{{ data.abcd }}</li>
<li>{{ k }}==>{{ v }}</li>
{% endfor %}
和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 %}#忽略模板语法
<ul>
{% for k,v in items %}
<li>{{ k,v }}</li>
{% endfor %}
</ul>
{% endraw %}
Flask会对”.html”, “.htm”, “.xml”, “.xhtml”这四种类型的模板文件开启HTML格式自动转义。这样也可以防止HTML语法注入.
{% autoescape false %} #将自动转义关闭
<h1>Hello {{ name }}!</h1>
{% 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()函数:通过视图找到路由
<link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">
(4) with与set
#set 添加变量
{% set name='张三' %}
#set也可赋值给列表或元组
{% set navigation = [('index.html', 'Index'), ('about.html', 'About')] %}
with语句可以创建内部作用域,主要是起到隔离作用
#在with该作用域下可以使用
{% with num = 42 %}
{{ num }}
{% endwith %}
Flask入门模板Jinja2语法与函数(四)的更多相关文章
- Flask入门模板过滤器与测试器(五)
1 模板引擎之过滤器 概念 : 过滤器本质上是个转换函数,第一个参数是待过滤的变量.如果它有第二个参数,模板中就必须传进去. 过滤器使用管道符| 放在{{ }} Jinja2模板引擎提供了丰富的内置过 ...
- Flask 的模板渲染
Flask 的模板渲染 渲染模板语言和django很像,都是用{{}},{%%} 注意点: 1 flask给模板传值,render_template("index.htm",use ...
- Flask 的 template模板 与 jinja2语法
Flask 的 template模板 与 jinja2语法 Flask使用的是Jinja2模板,所以其语法和Django基本无差别 1.模板基本数据的渲染 变量 {{..}} 列表 {% for it ...
- Flask基础之session验证与模板渲染语法(jinja2)
目录 1.http传输请求头参数 2.Flask中request.data参数处理 3.Flask中request.json参数 4.Flask中的session管理 5.Flask中模板语法(if, ...
- ECMall2.x模板制作入门系列之2(模板标签/语法)
ECMall2.x模板制作入门系列之2(模板标签/语法) 今天给大家带来一个模板语法的教程.希望能为ECMall模板制作者提供一份参考资料.如有问题.建议和意见,欢迎提出. 在ECMall模板中,用& ...
- Flask入门很轻松(三)—— 模板
Jinja2模板引擎 转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10959471.html Flask内置的模板语言,它的设计思想来源于 Dja ...
- 怎么用Python Flask模板jinja2在网页上打印显示16进制数?
问题:Python列表(或者字典等)数据本身是10进制,现在需要以16进制输出显示在网页上 解决: Python Flask框架中 模板jinja2的If 表达式和过滤器 假设我有一个字典index, ...
- ThinkPHP第五天(提交类型判定常量IS_POST等,错误页面种类,Model实例化方式,模板中使用函数,foreach循环,模板中.语法配置)
1.IS_GET.IS_POST.IS_PUT.IS_DELETE.IS_AJAX常量,方便快捷实现各个判断. 在Action类中还可以使用$this->isPost()等进行判断. 2.错误页 ...
- Flask网页模板的入门
#网页模板需要导入render_template from flask import Flask,render_template 方法一: #使用render_template模块来渲染模板文件 ...
随机推荐
- POJ:2456 Aggressive cows(z最大化最小值)
描述 农夫 John 建造了一座很长的畜栏,它包括N (2 <= N <= 100,000)个隔间,这些小隔间依次编号为x1,...,xN (0 <= xi <= 1,000, ...
- computed 和 watch 组合使用,监听数据全局数据状态
我要实现的就是,当接口返回数据时,我在任何组件中都能感知到到该数据的变化,然后根据业务逻辑进行处理.展示. 实现这个效果的方式很多,比如当接口返回数据后,就emit这数据,在另外组件中on接收渲染即可 ...
- POJ - 1948 二维01背包
T了两发,DP方程很简单粗暴 dp[i][j][k]:用前i物品使得容量分别为j和k的背包恰好装满 背包的调用只需一次即可,第一次T就是每次check都丧心病狂地背包一次 对于sum的枚举,其实i j ...
- 【记录】adb连不上手机
1.\用户\.android文件夹下新建adb_usb.ini,内容为手机的VID值,如0x9BB5 2.重启adb adb kill-server adb start-server adb devi ...
- 设计模式学习总结(六)原型模式(Prototype)
原型模式即通过对象拷贝的方式来实现对同类对象的生成的一种设计模式! 浅复制:对于值类型,则直接复制该值,对于引用类型的字段则是对其引用的复制,如果原引用与现引用只要有一个的值发生变化,则都会造成两者值 ...
- Angular4+NodeJs+MySQL 入门-05 接口调用
接口调用 今天讲一下,如果在前端页面上通过调用后台接口,返回来的数据.把前面的几章结合起来. 这里所有用的代码在 https://github.com/xiaotuni/angular-map-htt ...
- 案例46-crm练习客户登录
1 login.jsp代码 <%@ page language="java" contentType="text/html; charset=UTF-8" ...
- unity的技术博客
技术博客 http://www.cnblogs.com/wangergo/
- npm是什么NPM的全称是Node Package Manager
npm是什么NPM的全称是Node Package Manager
- centos系统为php安装memcached扩展
1. 通过yum安装 yum -y install memcached #安装完成后执行: memcached -h #出现memcached帮助信息说明安装成功 2. 加入启动服务 chkconfi ...