1 模板的创建

模板文件结构:

  1. project/
  2. templates/
  3. 模板文件

跳转模板一般使用:

from flask import render_template,render_template_string

render_template

  1. return render_template('index.html') #将index.html页面的内容读取出来并进行响应

render_template_string

  1. return render_template_string('<h1>index</h1>') #可以执行html标签语句

2 flask模板引擎Jinja2语法:

概述: 模板类似于MVC模式下的view视图层,模板引擎其实就是用来将模板同业务代码分离,并解析模板语言的程序.

比如模板代码

  1. <!doctype html>
  2. <title>Hello template</title>
  3. {% if name %}
  4. <h1>Hello {{ name }}!</h1>
  5. {% else %}
  6. <h1>Hello flask!</h1>
  7. {% endif %}

从上面例子可以发现:

模板表达式是包含在分割符{{ }}内

模板控制语句都是包含在分割符{% %}中

模板注释都是包含在分隔符{# #}中

  1. 变量 : 视图传递过来的数据

    {{ 变量名称 }}

  2. 标签 : 就是python中的循环\分支结构...

    {% 标签名称 %}

(1)表达式一般分为以下几种:

表达式种类 举例
变量(最常用) {{ name }}
基础类型( 字符串,数值,列表,元祖,字典,布尔值) 一般配合表达式使用{{ 'string' }}
运算表达式(算术与逻辑) {{ False and True }} {{ 2 + 3 }}
过滤器' | ' ,测试器' is ' 一般配合表达式
函数调用 {{ func( ) }}
“in”操作符 {{ 1 in [1,2,3] }}
字符串连接符”~” {{ 'like' }}

(2)控制语句一般有:

  1. <dl>
  2. {% for user in users if not user.hidden %}
  3. {% if loop.first %} # 第一次if判定
  4. <div>User List:</div>
  5. {% endif %}
  6. <div class="{{ loop.cycle('odd', 'even') }}">
  7. <dt>User No {{ loop.index }}:</dt>
  8. <dd>{{ user.name }}</dd>
  9. </div>
  10. {% if loop.last %} #最后一次if判定
  11. <div>Total Users: {{ loop.length }}</div>
  12. {% endif %}
  13. {% else %} #都不满足执行else
  14. <li>No users found</li>
  15. {% endfor %}
  16. </dl>

if elif else

  1. {% if data.bool %}
  2. {{ data.bool }}为真
  3. {% elif data.none %}
  4. {{ data.none }}为真
  5. {% else %}
  6. 以上都为假
  7. {% endif %}

for in 循环

  1. {% for k,v in data.items() %}
  2. <li>{{ foo }}</li>
  3. <li>{{ data.abcd }}</li>
  4. <li>{{ k }}==>{{ v }}</li>
  5. {% endfor %}

和else搭配

  1. {% for in %}
  2. ...
  3. {% else %}
  4. ...
  5. {% 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)忽略,转义,赋值
  1. {% raw %}#忽略模板语法
  2. <ul>
  3. {% for k,v in items %}
  4. <li>{{ k,v }}</li>
  5. {% endfor %}
  6. </ul>
  7. {% endraw %}
  8. Flask会对”.html”, “.htm”, “.xml”, “.xhtml”这四种类型的模板文件开启HTML格式自动转义。这样也可以防止HTML语法注入.
  9. {% autoescape false %} #将自动转义关闭
  10. <h1>Hello {{ name }}!</h1>
  11. {% endautoescape %}
  12. {% 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:本身也是一个字典

  1. session['user'] = u'张三'
  2. 设置session需要设置秘钥
  3. app.secret_key = '123456' 或者在配置文件 app.config['SECRET_KEY'] = '123456'

(3) url_for()函数:通过视图找到路由

  1. <link rel="stylesheet" href="{{ url_for('static', filename='style.css') }}">

(4) with与set

  1. #set 添加变量
  2. {% set name='张三' %}
  3. #set也可赋值给列表或元组
  4. {% set navigation = [('index.html', 'Index'), ('about.html', 'About')] %}

with语句可以创建内部作用域,主要是起到隔离作用

  1. #在with该作用域下可以使用
  2. {% with num = 42 %}
  3. {{ num }}
  4. {% endwith %}

Flask入门模板Jinja2语法与函数(四)的更多相关文章

  1. Flask入门模板过滤器与测试器(五)

    1 模板引擎之过滤器 概念 : 过滤器本质上是个转换函数,第一个参数是待过滤的变量.如果它有第二个参数,模板中就必须传进去. 过滤器使用管道符| 放在{{ }} Jinja2模板引擎提供了丰富的内置过 ...

  2. Flask 的模板渲染

    Flask 的模板渲染 渲染模板语言和django很像,都是用{{}},{%%} 注意点: 1 flask给模板传值,render_template("index.htm",use ...

  3. Flask 的 template模板 与 jinja2语法

    Flask 的 template模板 与 jinja2语法 Flask使用的是Jinja2模板,所以其语法和Django基本无差别 1.模板基本数据的渲染 变量 {{..}} 列表 {% for it ...

  4. Flask基础之session验证与模板渲染语法(jinja2)

    目录 1.http传输请求头参数 2.Flask中request.data参数处理 3.Flask中request.json参数 4.Flask中的session管理 5.Flask中模板语法(if, ...

  5. ECMall2.x模板制作入门系列之2(模板标签/语法)

    ECMall2.x模板制作入门系列之2(模板标签/语法) 今天给大家带来一个模板语法的教程.希望能为ECMall模板制作者提供一份参考资料.如有问题.建议和意见,欢迎提出. 在ECMall模板中,用& ...

  6. Flask入门很轻松(三)—— 模板

    Jinja2模板引擎 转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10959471.html Flask内置的模板语言,它的设计思想来源于 Dja ...

  7. 怎么用Python Flask模板jinja2在网页上打印显示16进制数?

    问题:Python列表(或者字典等)数据本身是10进制,现在需要以16进制输出显示在网页上 解决: Python Flask框架中 模板jinja2的If 表达式和过滤器 假设我有一个字典index, ...

  8. ThinkPHP第五天(提交类型判定常量IS_POST等,错误页面种类,Model实例化方式,模板中使用函数,foreach循环,模板中.语法配置)

    1.IS_GET.IS_POST.IS_PUT.IS_DELETE.IS_AJAX常量,方便快捷实现各个判断. 在Action类中还可以使用$this->isPost()等进行判断. 2.错误页 ...

  9. Flask网页模板的入门

    #网页模板需要导入render_template from flask import Flask,render_template   方法一: #使用render_template模块来渲染模板文件 ...

随机推荐

  1. hdu6437 Videos 费用流

    题目传送门 题目大意: 给出n,每天有n个小时.有m种电影,每个电影有开始时间和结束时间,和01两种种类,k个人,每一部电影只能被一个人看,会获得一个快乐值wi,如果一个人连续看两部相同种类的电影,快 ...

  2. 关于在scrapy中使用xpath

    1. 还是以虎嗅为例,他给我返回的是一个json格式的json串 2.那么我需要操作的就是把json串转换成我们的字典格式再进行操作 str=json.loads(response.body)['da ...

  3. PIE SDK矢量数据空间索引的创建

    1. 功能简介 空间索引的使用便于数据的查询:所以在创建矢量数据的时候创建空间索引,下面对矢量数据如何创建空间索引进行功能介绍. 2. 功能实现说明 2.1. 实现思路及原理说明 第一步 创建矢量要素 ...

  4. TCP协议:三次握手过程详解

    本文通过图来梳理TCP-IP协议相关知识.TCP通信过程包括三个步骤:建立TCP连接通道,传输数据,断开TCP连接通道.如图1所示,给出了TCP通信过程的示意图. 上图主要包括三部分:建立连接.传输数 ...

  5. BFC --- Block Formatting Context --- 块级格式化上下文

    虽然知道块级格式化上下文是什么东西,但要我把这个东西给说清楚,还真的不是一件容易的事儿,所以这篇文章我就要说说清楚到底什么使传说中的BFC,即块级格式化上下文. 一.BFC的通俗理解 通俗的理解 -- ...

  6. 案例42-使用ajax获取crm中的客户列表

    1webcontent部分 1 修改menu.jsp代码 2 jsp/customer/list.jsp代码 <%@ page language="java" content ...

  7. 【Java】使用Eclipse进行远程调试,Windows下开启远程调试

    原博链接:http://blog.csdn.net/sunyujia/article/details/2614614   今天决定做件有意义的事,写篇图文并茂的blog,为什么要图文并茂?因为很多事可 ...

  8. Coursera 机器学习 第8章(下) Dimensionality Reduction 学习笔记

    8 Dimensionality Reduction8.3 Motivation8.3.1 Motivation I: Data Compression第二种无监督问题:维数约简(Dimensiona ...

  9. django 将表数据通过API展示到页面上(转)

    需求: 我在learn这个app下创建了两张表,其中一个表为user,我希望通过API,在页面是展示这些数据,当用户访问指定的url时,将表中所有对象展示到页面上. 先看learn/models.py ...

  10. bootstrap-fileinput参数

    <link rel="stylesheet" href="css/bootstrapCSS/bootstrap.min.css"> <link ...