Flask框架学习笔记之模板操作实例详解


Posted in Python onAugust 15, 2019

本文实例讲述了Flask框架学习笔记之模板操作。分享给大家供大家参考,具体如下:

flask的模板引擎是Jinja2。

引入模板的好处是增加程序的可读性和易维护性,从而不用将一堆html代码塞在视图函数中。

还是以hello world为例。最基础的调用模板修饰文本。

# 根网址
@app.route('/')
def index():
  # return render_template("index.html")
  # 可以给模板传入文本content修饰
  content = "Hello World!"
  return render_template("index.html", content = content)

index模板,用{{}}表示变量。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <!--<h1>Hello World!</h1>></!-->
  <h1>{{ content }}</h1>
</body>
</html>

Flask框架学习笔记之模板操作实例详解

这里定义一个类以传入变量。

class User(object):
  def __init__(self, user_id, user_name):
    self.user_id = user_id
    self.user_name = user_name

传参

# 通过调用类的实例方法给模板传递参数修饰
@app.route('/user')
def user_index():
  user = User(520, "loli")# user_id, user_name
  return render_template("user_index.html", user=user)

user_index模板,仅显示user_name。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <h1>Hello {{ user.user_name }}</h1>
</body>
</html>

Flask框架学习笔记之模板操作实例详解

在模板中实现if语句

# 在模板中使用if语句
@app.route('/query_user/<user_id>')
def query_user(user_id):
  user = None
  # 如果传入的id为520则调用实例
  if int(user_id) == 520:
    user = User(520, 'loli')

  return render_template("user_id.html", user=user)

user_id模板,用{% %}包裹if语句,若user不为None(也就是传入了name),则显示if下语句,否则显示else下语句。

最后一定要加上{% endif %}表示判断语句结束。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  {% if user %}
    <h1>hello {{ user.user_name }}</h1>
  {% else %}
    <h1>no this user</h1>
  {% endif %}

</body>
</html>

Flask框架学习笔记之模板操作实例详解

Flask框架学习笔记之模板操作实例详解

在模板中使用for循环语句

@app.route('/users')
def user_list():
  users = []
  for i in range(1, 11):
    user = User(i, "loli" + str(i))
    users.append(user)# 将user添加到users
  return render_template("user_list.html", users = users)# 在模板中修饰users

user_list模板,同样的,for循环语句也要用{% %}包裹起来,需要用{% endfor %}表示for循环结束。这里传入id和name两个参数。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  {% for user in users %}
    {{ user.user_id }} -- {{ user.user_name }}<br>
  {% endfor %}
</body>
</html>

Flask框架学习笔记之模板操作实例详解

模板的继承。模板继承的初衷也是为了代码更加简单,更易维护,将相同部分的代码提到一个基类模板,有点类似于类的继承。

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
  <div>
    <h1>I love you {{ user.user_name }}</h1>
  </div>
  {% block content %}
  {% endblock %}
  <div>
    <h1>So much!</h1>
  </div>
</body>
</html>

用<div>圈起来的是不可变的父模板,可改动添加的部分在{% block content %}{% endblock %}之间。

子模版,用{% extends "父模板" %} 表示从父模板继承了代码。在{% block content %}{% endblock %}之间添加内容。

{% extends "base.html" %}
{% block content %}
  <h2>more than anyone</h2>
{% endblock %}
{% extends "base.html" %}
{% block content %}
  <h2>more than anything</h2>
{% endblock %}

调用

# 模板继承1
@app.route('/one')
def one_base():
  user = User(520, 'loli')
  return render_template("one_base.html", user=user)
# 模板继承2
@app.route('/two')
def two_base():
  user = User(520, 'loli')
  return render_template("two_base.html", user=user)

Flask框架学习笔记之模板操作实例详解

Flask框架学习笔记之模板操作实例详解

可以看到子模版继承了题头和尾部,中间为子模版添加的内容。

代码

#-*- coding:utf-8 -*-
from flask import Flask, render_template# 导入render_template以使用模板
# 定义一个models导入一个有id和name的类
from models import User

app = Flask(__name__)
# 根网址
@app.route('/')
def index():
  # return render_template("index.html")
  # 可以给模板传入文本content修饰
  content = "Hello World!"
  return render_template("index.html", content = content)
# 通过调用类的实例方法给模板传递参数修饰
@app.route('/user')
def user_index():
  user = User(520, "loli")
  return render_template("user_index.html", user=user)
# 在模板中使用if语句
@app.route('/query_user/<user_id>')
def query_user(user_id):
  user = None
  if int(user_id) == 520:
    user = User(520, 'loli')

  return render_template("user_id.html", user=user)
# 在模板中使用for循环语句
@app.route('/users')
def user_list():
  users = []
  for i in range(1, 11):
    user = User(i, "loli" + str(i))
    users.append(user)
  return render_template("user_list.html", users = users)
# 模板继承1
@app.route('/one')
def one_base():
  user = User(520, 'loli')
  return render_template("one_base.html", user=user)
# 模板继承2
@app.route('/two')
def two_base():
  user = User(520, 'loli')
  return render_template("two_base.html", user=user)

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

希望本文所述对大家基于flask框架的Python程序设计有所帮助。

Python 相关文章推荐
python实现排序算法
Feb 14 Python
从零学python系列之数据处理编程实例(一)
May 22 Python
Python文件去除注释的方法
May 25 Python
详谈python3中用for循环删除列表中元素的坑
Apr 19 Python
对Python3.x版本print函数左右对齐详解
Dec 22 Python
Django用户认证系统 组与权限解析
Aug 02 Python
python设置随机种子实例讲解
Sep 12 Python
python3 sleep 延时秒 毫秒实例
May 04 Python
Python如何执行精确的浮点数运算
Jul 31 Python
Django中日期时间型字段进行年月日时分秒分组统计
Nov 27 Python
教你怎么用Python实现GIF动图的提取及合成
Jun 15 Python
python not运算符的实例用法
Jun 30 Python
Flask框架学习笔记之消息提示与异常处理操作详解
Aug 15 #Python
python打造爬虫代理池过程解析
Aug 15 #Python
使用selenium和pyquery爬取京东商品列表过程解析
Aug 15 #Python
如何爬取通过ajax加载数据的网站
Aug 15 #Python
Python K最近邻从原理到实现的方法
Aug 15 #Python
Python数据可视化 pyecharts实现各种统计图表过程详解
Aug 15 #Python
浅谈Python 敏感词过滤的实现
Aug 15 #Python
You might like
Search File Contents PHP 搜索目录文本内容的代码
2010/02/21 PHP
php处理json时中文问题的解决方法
2011/04/12 PHP
PHP限制页面只能在微信自带浏览器访问的代码
2014/01/15 PHP
php中require和require_once的区别说明
2014/02/27 PHP
php网页版聊天软件实现代码
2016/08/12 PHP
常用一些Javascript判断函数
2012/08/14 Javascript
深入解析contentWindow, contentDocument
2013/07/04 Javascript
js加减乘除丢失精度问题解决方法
2014/05/16 Javascript
JQuery+CSS实现图片上放置按钮的方法
2015/05/29 Javascript
JavaScript代码性能优化总结(推荐)
2016/05/16 Javascript
Node.js中.pfx后缀文件的处理方法
2017/03/10 Javascript
tab栏切换原理
2017/03/22 Javascript
浅谈ES6新增的数组方法和对象
2017/08/08 Javascript
详解微信小程序的 request 封装示例
2018/08/21 Javascript
微信小程序导入Vant报错VM292:1 thirdScriptError的解决方法
2019/08/01 Javascript
antd form表单数据回显操作
2020/11/02 Javascript
python修改操作系统时间的方法
2015/05/18 Python
python实现两个经纬度点之间的距离和方位角的方法
2019/07/05 Python
Python对接 xray 和微信实现自动告警
2019/09/17 Python
tensorboard显示空白的解决
2020/02/15 Python
Python反爬虫伪装浏览器进行爬虫
2020/02/28 Python
一文轻松掌握python语言命名规范规则
2020/06/18 Python
Python 在局部变量域中执行代码
2020/08/07 Python
python中添加模块导入路径的方法
2021/02/03 Python
详解canvas绘制多张图的排列顺序问题
2019/01/21 HTML / CSS
trivago美国:全球最大的酒店价格比较网站
2018/01/18 全球购物
美国在线面料商店:Online Fabric Store
2018/07/26 全球购物
纽约和芝加哥当天送花:Ode à la Rose
2019/07/05 全球购物
Java里面StringBuilder和StringBuffer有什么区别
2016/06/06 面试题
给排水专业应届生求职信
2013/10/12 职场文书
七年级数学教学反思
2014/01/22 职场文书
工作汇报开头与结尾怎么写
2014/11/08 职场文书
嘉宾邀请函
2015/01/31 职场文书
工作建议书范文
2019/07/08 职场文书
PHP中strval()函数实例用法
2021/06/07 PHP
Redis超详细讲解高可用主从复制基础与哨兵模式方案
2022/04/07 Redis