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写入xml文件的方法
May 08 Python
Python批量转换文件编码格式
May 17 Python
python中Switch/Case实现的示例代码
Nov 09 Python
用Python删除本地目录下某一时间点之前创建的所有文件的实例
Dec 14 Python
python爬虫的数据库连接问题【推荐】
Jun 25 Python
python存储16bit和32bit图像的实例
Dec 05 Python
python反编译学习之字节码详解
May 19 Python
python GUI图形化编程wxpython的使用
Jul 19 Python
python 叠加等边三角形的绘制的实现
Aug 14 Python
tensorflow 20:搭网络,导出模型,运行模型的实例
May 26 Python
Python利用socket模块开发简单的端口扫描工具的实现
Jan 27 Python
用Python监控你的朋友都在浏览哪些网站?
May 27 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
解析将多维数组转换为支持curl提交的一维数组格式
2013/07/08 PHP
php使用多个进程同时控制文件读写示例
2014/02/28 PHP
学习php设计模式 php实现策略模式(strategy)
2015/12/07 PHP
PHP Include文件实例讲解
2019/02/15 PHP
PHP如何防止用户重复提交表单
2020/12/09 PHP
jquery HotKeys轻松搞定键盘事件代码
2008/08/30 Javascript
基于jquery实现的图片在各种分辨率下未知的容器内上下左右居中
2014/05/11 Javascript
jQuery+AJAX实现网页无刷新上传
2015/02/22 Javascript
Bootstrap每天必学之简单入门
2015/11/19 Javascript
js省市联动效果完整实例代码
2015/12/09 Javascript
jquery操作select元素和option的实例代码
2016/02/03 Javascript
js获取Html元素的实际宽度高度的方法
2016/05/19 Javascript
浅析JavaScript中命名空间namespace模式
2016/06/22 Javascript
jQuery Raty 一款不错的星级评分插件
2016/08/24 Javascript
荐书|您有一份JavaScript书单待签收
2017/07/21 Javascript
详解Angular调试技巧之报错404(not found)
2018/01/31 Javascript
详解ES6中的三种异步解决方案
2018/06/28 Javascript
js 实现watch监听数据变化的代码
2019/10/13 Javascript
Vuex实现数据共享的方法
2019/12/20 Javascript
深入了解Vue.js 混入(mixins)
2020/07/23 Javascript
浅谈js数组splice删除某个元素爬坑
2020/10/14 Javascript
django实现用户登陆功能详解
2017/12/11 Python
Python模块文件结构代码详解
2018/02/03 Python
谈一谈基于python的面向对象编程基础
2019/05/21 Python
python分割一个文本为多个文本的方法
2019/07/22 Python
Python二次规划和线性规划使用实例
2019/12/09 Python
使用pyqt5 tablewidget 单元格设置正则表达式
2019/12/13 Python
pycharm专业版远程登录服务器的详细教程
2020/09/15 Python
简单了解Python字典copy与赋值的区别
2020/09/16 Python
python利用google翻译方法实例(翻译字幕文件)
2020/09/21 Python
10个很棒的 CSS3 开发工具 推荐
2011/05/16 HTML / CSS
CSS3实现文本垂直排列的方法
2018/07/10 HTML / CSS
美国知名的摄影器材销售网站:Adorama
2017/02/01 全球购物
中文专业求职信
2014/06/20 职场文书
学生逃课检讨书1000字
2014/10/20 职场文书
赢在中国观后感
2015/06/02 职场文书