当前位置: 首页 > news >正文

Flask 5 模板1

NOTE

1.VF的作用:生成请求的响应。一般来说请求会改变程序的状态,这种变化会在视图函数中产生。

eg.用户在网站中注册了一个新账户,用户在表单中输入电子邮件地址和密码,然后提交到服务器,服务器接收到请求,然后Flask将请求分发到处理注册的视图函数。这个视图函数首先要访问数据库添加新用户,然后生成响应返回游览器。

访问数据库添加新用户的过程称为业务逻辑,生成响应返回称为表现逻辑。

2.将业务逻辑和表现逻辑混杂在一起使代码难以理解和维护。把表现逻辑移动到模板中能够提升程序的可维护性。

3.模板是一个保含响应文本的文件,其中有需要用上下文中的真实值替换占位变量的动态部分,也有无法改变的静态部分。

用真实值替换变量,返回响应字符串,称为渲染。

Flask使用了名为Jinja2的强大模板引擎。

4.Demo

Jinja2 templates/index.html

<h1>Hello World!</h1>

Jinja2 templates/user.html

<h1>Hello, {{ name }}!</h1>

模板渲染:从flask导入render_template函数,以集成Jinja2引擎。

#!/usr/bin/env python

from flask import Flask, render_template

app = Flask(__name__)

@app.route('/')
def index():
    return render_template('index.html')

@app.route('/user/<name>')
def user(name):
    return render_template('user.html', name=name)

if __name__ == '__main__':
    app.run(debug=True)

name=name 关键字键值对,左边的name是参数名,右边的name是变量。

(venv) sh-3.2# ./hello.py 
 * Running on http://127.0.0.1:5000/ (Press CTRL+C to quit)
 * Restarting with stat
 * Debugger is active!
 * Debugger pin code: 195-717-834
127.0.0.1 - - [18/Feb/2017 15:52:11] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [18/Feb/2017 15:52:22] "GET / HTTP/1.1" 200 -
127.0.0.1 - - [18/Feb/2017 15:52:23] "GET /user/wasdns HTTP/1.1" 200 -
127.0.0.1 - - [18/Feb/2017 15:52:25] "GET /user/wasdns HTTP/1.1" 200 -

885822-20170218155302457-1456728311.png

5.{{ name }}结构表示一个变量,是一种特殊的占位符。Jinja2能够识别所有类型的变量,甚至是一些复杂的类型。

此外,可以使用过滤器来修改变量,过滤器名添加在变量名之后,中间使用竖线划分。

=> Flask的Jinja2模板引擎 — 过滤器(3rd)

safe        渲染值时不转义
capitaliza  把值的首字母替换为大写,其他为小写。

eg.

<h1>Hello, {{ name|capitalize }}!</h1>
@app.route('/user/<name>')
def user(name):
    return render_template('filter.html', name=name)
127.0.0.1 - - [18/Feb/2017 16:11:01] "GET /user/wasdns HTTP/1.1" 200 -

885822-20170218161140660-269495692.png

出于安全考虑,Jinja2会转义所有变量。有些情况下需要显示变量中存储的html代码,这个时候就需要使用safe过滤器。

2017/2/18

相关文章:

  • hibernate主键为字符串的注解
  • spring拦截器
  • C#实现正则表达式
  • mitmproxy
  • tableView选择多项或单选
  • ip_conntrack table full dropping packet解决方案
  • Oracle for 循环
  • c++免注册大漠插件
  • 求上限值的整数勾股数
  • 微信小程序把玩(二十二)action-sheet组件
  • Python爬虫入门六之Cookie的使用
  • mysql学习笔记(二)--- MySQL数据类型
  • 【转】 android中的文件操作详解以及内部存储和外部存储
  • 03、常用类解析
  • 跟小博老师一起学JSP ——简介与工作原理
  • 网络传输文件的问题
  • [译] 理解数组在 PHP 内部的实现(给PHP开发者的PHP源码-第四部分)
  • [译]Python中的类属性与实例属性的区别
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • docker-consul
  • Java知识点总结(JavaIO-打印流)
  • leetcode388. Longest Absolute File Path
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • Redash本地开发环境搭建
  • Vue全家桶实现一个Web App
  • Vue组件定义
  • 模型微调
  • 排序(1):冒泡排序
  • 区块链分支循环
  • 如何进阶一名有竞争力的程序员?
  • mysql 慢查询分析工具:pt-query-digest 在mac 上的安装使用 ...
  • Nginx实现动静分离
  • 选择阿里云数据库HBase版十大理由
  • ​linux启动进程的方式
  • ​直流电和交流电有什么区别为什么这个时候又要变成直流电呢?交流转换到直流(整流器)直流变交流(逆变器)​
  • # 学号 2017-2018-20172309 《程序设计与数据结构》实验三报告
  • #include<初见C语言之指针(5)>
  • #周末课堂# 【Linux + JVM + Mysql高级性能优化班】(火热报名中~~~)
  • (1)Android开发优化---------UI优化
  • (13)Hive调优——动态分区导致的小文件问题
  • (Arcgis)Python编程批量将HDF5文件转换为TIFF格式并应用地理转换和投影信息
  • (Oracle)SQL优化技巧(一):分页查询
  • (Pytorch框架)神经网络输出维度调试,做出我们自己的网络来!!(详细教程~)
  • (Redis使用系列) Springboot 使用redis的List数据结构实现简单的排队功能场景 九
  • (ZT)薛涌:谈贫说富
  • (二)springcloud实战之config配置中心
  • (附源码)spring boot基于Java的电影院售票与管理系统毕业设计 011449
  • (学习日记)2024.01.19
  • (一)Java算法:二分查找
  • (一)spring cloud微服务分布式云架构 - Spring Cloud简介
  • (转)socket Aio demo
  • .NET 8.0 中有哪些新的变化?
  • .NET Core WebAPI中封装Swagger配置
  • .net mvc 获取url中controller和action
  • .net 使用$.ajax实现从前台调用后台方法(包含静态方法和非静态方法调用)