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实现simhash算法实例
Apr 25 Python
Python中isnumeric()方法的使用简介
May 19 Python
tensorflow 获取模型所有参数总和数量的方法
Jun 14 Python
python中的插值 scipy-interp的实现代码
Jul 23 Python
python 不同方式读取文件速度不同的实例
Nov 09 Python
详解pandas如何去掉、过滤数据集中的某些值或者某些行?
May 15 Python
Python Gitlab Api 使用方法
Aug 28 Python
python字符串格式化方式解析
Oct 19 Python
python自动结束mysql慢查询会话的实例代码
Oct 27 Python
安装Pycharm2019以及配置anconda教程的方法步骤
Nov 11 Python
Python基础之字典常见操作经典实例详解
Feb 26 Python
Django静态文件加载失败解决方案
Aug 26 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
十大感人催泪爱情动漫 第一名至今不忍在看第二遍
2020/03/04 日漫
PHP-FPM实现性能优化
2016/03/31 PHP
漂亮的widgets,支持换肤和后期开发新皮肤
2007/04/23 Javascript
一款Jquery 分页插件的改造方法(服务器端分页)
2011/07/11 Javascript
$.getJSON在IE下失效的原因分析及解决方法
2013/06/16 Javascript
js调试系列 源码定位与调试[基础篇]
2014/06/18 Javascript
JQuery中模拟image的ajaxPrefilter与ajaxTransport处理
2015/06/19 Javascript
js仿黑客帝国字母掉落效果代码分享
2020/11/08 Javascript
BootStrap实用代码片段之一
2016/03/22 Javascript
javascript 数组的正态分布排序的问题
2016/07/31 Javascript
javascript使用 concat 方法对数组进行合并的方法
2016/09/08 Javascript
Select2.js下拉框使用小结
2016/10/24 Javascript
jquery 多个radio的click事件实例
2016/12/03 Javascript
nodejs搭建本地http服务器教程
2017/03/13 NodeJs
jquery操作ul的一些操作笔记整理(干货)
2017/08/31 jQuery
微信小程序如何实现全局重新加载
2019/06/05 Javascript
vue + typescript + video.js实现 流媒体播放 视频监控功能
2019/07/07 Javascript
微信小程序之 catalog 切换实现解析
2019/09/12 Javascript
利用webpack理解CommonJS和ES Modules的差异区别
2020/06/16 Javascript
Vue 解决父组件跳转子路由后当前导航active样式消失问题
2020/07/21 Javascript
vue3.0+vue-router+element-plus初实践
2020/12/02 Vue.js
[03:42]2014DOTA2西雅图国际邀请赛 Navi战队巡礼
2014/07/07 DOTA
微信跳一跳游戏python脚本
2020/04/01 Python
基于MTCNN/TensorFlow实现人脸检测
2018/05/24 Python
selenium+python截图不成功的解决方法
2019/01/30 Python
在PyTorch中使用标签平滑正则化的问题
2020/04/03 Python
Django {{ MEDIA_URL }}无法显示图片的解决方式
2020/04/07 Python
Python使用Selenium模拟浏览器自动操作功能
2020/09/08 Python
使用CSS3的appearance属性改变任何元素的浏览器默认风格
2012/12/24 HTML / CSS
女性时尚在线:IVRose
2019/02/23 全球购物
Footshop乌克兰:运动鞋的最大选择
2019/12/01 全球购物
银行实习自我鉴定
2013/10/12 职场文书
人力资源主管岗位职责
2014/01/29 职场文书
团日活动策划书
2014/02/01 职场文书
SQL注入篇学习之盲注/宽字节注入
2022/03/03 MySQL
Nginx文件已经存在全局反向代理问题排查记录
2022/07/15 Servers