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 MySQLdb模块连接操作mysql数据库实例
Apr 08 Python
Python自动化运维之IP地址处理模块详解
Dec 10 Python
Python数据结构与算法之使用队列解决小猫钓鱼问题
Dec 14 Python
Python实现通讯录功能
Feb 22 Python
Python针对给定字符串求解所有子序列是否为回文序列的方法
Apr 21 Python
详解Django之admin组件的使用和源码剖析
May 04 Python
Python实现聊天机器人的示例代码
Jul 09 Python
Python面向对象之静态属性、类方法与静态方法分析
Aug 24 Python
详解用pyecharts Geo实现动态数据热力图城市找不到问题解决
Jun 26 Python
用python打印1~20的整数实例讲解
Jul 01 Python
Python 实现简单的客户端认证
Jul 29 Python
解决Django transaction进行事务管理踩过的坑
Apr 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
ThinkPHP采用实现三级循环代码实例
2014/07/18 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
关于JAVASCRIPT urldecode URL解码的问题
2012/01/08 Javascript
jQuery实现列表自动循环滚动鼠标悬停时停止滚动
2013/09/06 Javascript
js实现图片点击左右轮播
2015/07/08 Javascript
JS实现三级折叠菜单特效,其它级可自动收缩
2015/08/06 Javascript
微信支付如何实现内置浏览器的H5页面支付
2015/09/25 Javascript
js验证框架之RealyEasy验证详解
2016/06/08 Javascript
javascript鼠标滑过显示二级菜单特效
2020/11/18 Javascript
基于JS实现bookstore静态页面的实例代码
2017/02/22 Javascript
微信小程序手势操作之单触摸点与多触摸点
2017/03/10 Javascript
详解Angular2组件之间如何通信
2017/06/22 Javascript
AngularJs 终极购物车(实例讲解)
2017/11/08 Javascript
详解小程序毫秒级倒计时(适用于拼团秒杀功能)
2019/05/05 Javascript
在Vue项目中使用Typescript的实现
2019/12/19 Javascript
Vue中使用JsonView来展示Json树的实例代码
2020/11/16 Javascript
JavaScript基于SVG的图片切换效果实例代码
2020/12/15 Javascript
[10:04]国际邀请赛采访专栏:DK.Farseer,mouz.Black^,采访员Josh专访
2013/08/05 DOTA
python监控网站运行异常并发送邮件的方法
2015/03/13 Python
python3.6 实现AES加密的示例(pyCryptodome)
2018/01/10 Python
对Python 数组的切片操作详解
2018/07/02 Python
Python3爬虫全国地址信息
2019/01/05 Python
详解python中init方法和随机数方法
2019/03/13 Python
python OpenCV GrabCut使用实例解析
2019/11/11 Python
PyTorch使用cpu加载模型运算方式
2020/01/13 Python
详解Python修复遥感影像条带的两种方式
2020/02/23 Python
Python‘==‘ 及 ‘is‘相关原理解析
2020/09/05 Python
如何利用python读取micaps文件详解
2020/10/18 Python
浅析HTML5中header标签的用法
2016/06/24 HTML / CSS
HTML5 背景的显示区域实现
2020/07/09 HTML / CSS
美国最大的农村生活方式零售店:Tractor Supply Company(TSC)
2017/05/15 全球购物
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
生物制药自我鉴定
2014/01/25 职场文书
ktv中秋节活动方案
2014/01/30 职场文书
聚美优品广告词改编
2014/03/14 职场文书
ORACLE查看当前账号的相关信息
2021/06/18 Oracle