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中使用sort()方法进行排序的简单教程
May 21 Python
Python中操作文件之write()方法的使用教程
May 25 Python
Python中将字典转换为列表的方法
Sep 21 Python
python实现批量按比例缩放图片效果
Mar 30 Python
Python可变参数*args和**kwargs用法实例小结
Apr 27 Python
查找python项目依赖并生成requirements.txt的方法
Jul 10 Python
Python安装Flask环境及简单应用示例
May 03 Python
python爬虫之遍历单个域名
Nov 20 Python
Django 设置多环境配置文件载入问题
Feb 25 Python
openCV提取图像中的矩形区域
Jul 21 Python
如何基于Python爬虫爬取美团酒店信息
Nov 03 Python
linux中nohup和后台运行进程查看及终止
Jun 24 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
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
php如何获取文件的扩展名
2015/10/28 PHP
PHP封装的PDO数据库操作类实例
2017/06/21 PHP
PHP+jQuery实现双击修改table表格功能示例
2019/02/21 PHP
基于JQuery的一句代码实现表格的简单筛选
2010/07/26 Javascript
Firebug入门指南(Firefox浏览器)
2010/08/21 Javascript
再次分享18个非常棒的jQuery表格插件
2011/04/10 Javascript
读jQuery之九 一些瑕疵说明
2011/06/21 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
jQuery选择器全面总结
2014/01/06 Javascript
jQuery实现给页面换肤的方法
2015/05/30 Javascript
跟我学习javascript的var预解析与函数声明提升
2015/11/16 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
JS针对浏览器窗口关闭事件的监听方法集锦
2016/06/24 Javascript
Angular ng-class详解及实例代码
2016/09/19 Javascript
Bootstrap Modal遮罩弹出层(完整版)
2016/11/21 Javascript
ajax实现加载页面、删除、查看详细信息 bootstrap美化页面!
2017/03/14 Javascript
鼠标经过出现气泡框的简单实例
2017/03/17 Javascript
零基础之Node.js搭建API服务器的详解
2019/03/08 Javascript
layer弹出框确定前验证:弹出消息框的方法(弹出两个layer)
2019/09/21 Javascript
python+jinja2实现接口数据批量生成工具
2019/08/28 Python
Python 变量的创建过程详解
2019/09/02 Python
使用批处理脚本自动生成并上传NuGet包(操作方法)
2019/11/19 Python
tensorflow没有output结点,存储成pb文件的例子
2020/01/04 Python
浅谈opencv自动光学检测、目标分割和检测(连通区域和findContours)
2020/06/04 Python
荷兰皇家航空公司官方网站:KLM Royal Dutch Airlines
2017/12/07 全球购物
Myprotein台湾官方网站:全球领先的运动营养品牌
2018/12/10 全球购物
Booking.com缤客中国:全球酒店在线预订网站
2020/05/03 全球购物
高中历史教学反思
2014/02/08 职场文书
超市创业计划书
2014/04/24 职场文书
灰雀教学反思
2014/04/28 职场文书
体现团队精神的口号
2014/06/06 职场文书
校园环境卫生倡议书
2015/04/29 职场文书
2015年化工厂工作总结
2015/05/04 职场文书
《给予树》教学反思
2016/03/03 职场文书
Python 键盘事件详解
2021/11/11 Python