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 24 Python
全面解读Python Web开发框架Django
Jun 30 Python
Python采用raw_input读取输入值的方法
Aug 18 Python
Python实现数据库并行读取和写入实例
Jun 09 Python
Python实现对百度云的文件上传(实例讲解)
Oct 21 Python
Python比较2个时间大小的实现方法
Apr 10 Python
如何利用python查找电脑文件
Apr 27 Python
简单的Python调度器Schedule详解
Aug 30 Python
pytest中文文档之编写断言
Sep 12 Python
利用python实现凯撒密码加解密功能
Mar 31 Python
keras 回调函数Callbacks 断点ModelCheckpoint教程
Jun 18 Python
Django对接elasticsearch实现全文检索的示例代码
Aug 02 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
也谈 PHP 和 MYSQL
2006/10/09 PHP
php生成验证码,缩略图及水印图的类分享
2016/04/07 PHP
thinkphp3.x中display方法及show方法的用法实例
2016/05/19 PHP
JS BASE64编码 window.atob(), window.btoa()
2021/03/09 Javascript
js监听表单value的修改同步问题,跨浏览器支持
2009/12/31 Javascript
javascript instanceof,typeof的区别
2010/03/24 Javascript
关于全局变量和局部变量的那些事
2013/01/11 Javascript
jquery表格内容筛选实现思路及代码
2013/04/16 Javascript
jQuery常用的一些技巧汇总
2016/03/26 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
js实现消息滚动效果
2017/01/18 Javascript
Js利用prototype自定义数组方法示例
2017/10/20 Javascript
JS实现的文字间歇循环滚动效果完整示例
2018/02/13 Javascript
JsonServer安装及启动过程图解
2020/02/28 Javascript
在Docker上部署Python的Flask框架的教程
2015/04/08 Python
python中的全局变量用法分析
2015/06/09 Python
Python的Flask框架标配模板引擎Jinja2的使用教程
2016/07/12 Python
Python测试人员需要掌握的知识
2018/02/08 Python
对Python3之进程池与回调函数的实例详解
2019/01/22 Python
kali中python版本的切换方法
2019/07/11 Python
pyqt5实现井字棋的示例代码
2020/12/07 Python
python如何构建mock接口服务
2021/01/28 Python
爱尔兰灯和灯具网上商店:Lights.ie
2018/03/26 全球购物
德国网上宠物店:Zoobio
2018/05/23 全球购物
美国排名第一的泳池用品直接来源:In The Swim
2019/09/23 全球购物
智乐游戏测试笔试题
2014/05/21 面试题
软件配置管理有什么好处
2015/04/15 面试题
大型车展策划方案
2014/02/01 职场文书
致标枪运动员加油稿
2014/02/15 职场文书
大学生秋游活动方案
2014/02/17 职场文书
乡镇干部个人对照检查材料(群众路线)
2014/09/26 职场文书
群众路线自我剖析范文
2014/11/04 职场文书
离职感谢信
2015/01/21 职场文书
2015年体育教师个人工作总结
2015/05/12 职场文书
债务纠纷代理词
2015/05/25 职场文书
Java 实现限流器处理Rest接口请求详解流程
2021/11/02 Java/Android