Flask框架(2)-JinJa2模板
为了把业务逻辑和表现逻辑分开,Flask把表现逻辑移到JinJa2模板,模板是一个包含响应文本的文件。它用占位变量表示动态部分,其具体要从请求上下文才知道。
把真实值替换掉占位变量成为渲染,JinJa2模板的创造者也是Flask的创造者,所以不需要额外安装包。
1. Flask使用模板
1.1 建立模板
在程序的同一级目录下建立templates目录,在该目录下建立user.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- <meta charset="UTF-8">
- <title>Title</title>
- </head>
- <body>
- <h1>Hello {{ name }}!!!</h1>
- </body>
- </html>
{{ name }}就是一个变量符,它的值要渲染得到
1.2. 加载模板
- from flask import Flask
- from flask import render_template
- app=Flask(__name__)
- @app.route('/user/<name>')
- def user(name):
- return render_template('user.html',name=name)
- if __name__ == '__main__':
- app.run(debug=True)
1.3 变量和过滤器
JinJia2可以识别所有类型变量,如:
{{ MyList[1] }}
{{ MyObj.test() }}
Jinja2还提供了过滤器用于修改变量
用法: {{ name|uppr }}
1.4 控制结构
判断:
- {% if user %}
- Hello,{{ user }}
- {% else %}
- Please input your name!!!
- {% endif %}
循环:
- {% for name in user %}
- <li>{{ name }}</li>
- {% endfor %}
1.5 定义宏
宏类似于Python中的函数,可以被重复使用
macro.html
- {% macro render_comment(comment) %}
- <li>{{ comment }}</li>
- {% endmacro %}
- <ul>
- {% for comment in comments %}
- {{ render_comment(comment) }}
- {% endfor %}
- </ul>
在模板中导入这个宏文件
- <body>
- {% import 'macro.html' as macros %}
- <ul>
- {% for user in names %}
- {{ macros.render_comment(user) }}
- {% endfor %}
- <ul>
- </body>
1.6 继承
base.html
- <!DOCTYPE html>
- <html lang="en">
- <head>
- {% block head %}
- <title>{% block title %}{% endblock %} - My APP</title>
- {% endblock %}
- </head>
- <body>
- {% block body %}
- {% endblock %}
- </body>
- </html>
继承base.html
- {% extends "base.html" %}
- {% block title %}Index{% endblock %}
- {% block body %}
- <h1>hello world</h1>
- {% endblock %}
2. 使用Flask-BootStrap
想要在程序中继承bootstrap,可以使用flask-bootstrap的flask拓展,简化集成过程。
2.1 安装Flask-BootStrap
- pip install flask-bootstrap
2.2 继承bootstrap/base.html
user.html
- {% extends "bootstrap/base.html" %}
- {% block title %}Flasky{% endblock %}
- {% block navbar %}
- <div class="navbar navbar-inverse" role="navigation">
- <div class="container">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <a class="navbar-brand" href="/">Flasky</a>
- </div>
- <div class="navbar-collapse collapse">
- <ul class="nav navbar-nav">
- <li><a href="/">Home</a></li>
- </ul>
- </div>
- </div>
- </div>
- {% endblock %}
- {% block content %}
- <div class="container">
- <div class="page-header">
- <h1>Hello, {{ name }}!</h1>
- </div>
- </div>
- {% endblock %}
navbar和content分别表示导航条和主体内容
页面效果:
bootstrap/base.html定义的所有块
3.3 定义错误页面
hello.py
- from flask import Flask, render_template
- from flask_bootstrap import Bootstrap
- app = Flask(__name__)
- bootstrap = Bootstrap(app)
- @app.errorhandler(404)
- def page_not_found(e):
- return render_template('404.html'), 404
- @app.errorhandler(500)
- def internal_server_error(e):
- return render_template('500.html'), 500
- @app.route('/')
- def index():
- return render_template('index.html')
- @app.route('/user/<name>')
- def user(name):
- return render_template('user.html', name=name)
- if __name__ == "__main__":
- app.run()
编写base.html
- {% extends "bootstrap/base.html" %}
- {% block title %}Flasky{% endblock %}
- {% block navbar %}
- <div class="navbar navbar-inverse" role="navigation">
- <div class="container">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <a class="navbar-brand" href="/">Flasky</a>
- </div>
- <div class="navbar-collapse collapse">
- <ul class="nav navbar-nav">
- <li><a href="/">Home</a></li>
- </ul>
- </div>
- </div>
- </div>
- {% endblock %}
- {% block content %}
- <div class="container">
- {% block page_content %}{% endblock %}
- </div>
- {% endblock %}
编写404.html
- {% extends "base.html" %}
- {% block title %}Flasky - Page Not Found{% endblock %}
- {% block page_content %}
- <div class="page-header">
- <h1>Not Found</h1>
- </div>
- {% endblock %}
3.4 静态文件
- {% extends "bootstrap/base.html" %}
- {% block title %}Flasky{% endblock %}
- {% block head %}
- {{ super() }}
- <link rel="shortcut icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon">
- <link rel="icon" href="{{ url_for('static', filename='favicon.ico') }}" type="image/x-icon">
- {% endblock %}
- {% block navbar %}
- <div class="navbar navbar-inverse" role="navigation">
- <div class="container">
- <div class="navbar-header">
- <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
- <span class="sr-only">Toggle navigation</span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- <span class="icon-bar"></span>
- </button>
- <a class="navbar-brand" href="/">Flasky</a>
- </div>
- <div class="navbar-collapse collapse">
- <ul class="nav navbar-nav">
- <li><a href="/">Home</a></li>
- </ul>
- </div>
- </div>
- </div>
- {% endblock %}
- {% block content %}
- <div class="container">
- {% block page_content %}{% endblock %}
- </div>
- {% endblock %}
url_for会找到视图函数对应的URL。
Flask框架(2)-JinJa2模板的更多相关文章
- Flask 框架下 Jinja2 模板引擎高层 API 类——Environment
Environment 类版本: 本文所描述的 Environment 类对应于 Jinja2-2.7 版本. Environment 类功能: Environment 是 Jinja2 中的一个 ...
- Python框架学习之Flask中的Jinja2模板
前面也提到过在Flask中最核心的两个组件是Werkzeug和Jinja2模板.其中Werkzeug在前一节已经详细说明了.现在这一节主要是来谈谈Jinja2模板. 一.为什么需要引入模板: 在进行软 ...
- 自定义Web框架与jinja2模板
web应用与web框架 web应用 对于所有的Web应用,本质上其实就是一个socket服务端,用户的浏览器其实就是一个socket客户端 import socket def handle_reque ...
- Flask初学者:Jinja2模板
Python的Jinja2模板,其实就是在HTML文档中使用控制语句和表达语句替换HTML文档中的变量来控制HTML的显示格式,Python的Jinja2模板可以更加灵活和方便的控制HTML的显示,而 ...
- flask(二)之Jinja2模板与Flask-WTF
01-文档 官方文档:http://docs.jinkan.org/docs/jinja2/ 02-基本语义 Jinja2做构成的模板文件中,文本内容大致可以分成几个种类.比如特殊文本(不进行转义,比 ...
- 测开之路二十九:Flask基础之jinja2模板
中文文档:http://docs.jinkan.org/docs/jinja2/ 与静态资源一样,Flask默认的模板目录名为templates,如果有需要的话和static一样,要在初始化的时候声明 ...
- 测开之路三十:Flask基础之jinja2模板继承
实现某些位置的内容固定,某些位置的内容动态展示,如: 中文文档地址:http://docs.jinkan.org/docs/jinja2/templates.html#template-inherit ...
- Flask框架函数
title: flask学习笔记 subtitle: 1. flask框架函数 date: 2018-12-14 10:17:28 --- Flask学习 学习Miguel Grinberg的2017 ...
- flask框架下的jinja2模板引擎(2)(过滤器与自定义过滤器)
flask框架下的jinja2模块引擎(1):https://www.cnblogs.com/chichung/p/9774556.html 这篇论文主要用来记录下 jinja2 的过滤器. 什么是过 ...
- flask框架下的jinja2模板引擎(1)(模板渲染)
#转载请留言联系 模板是什么? 在 flask 框架中,视图函数有两个作用:处理业务逻辑和返回响应内容.在大型应用中,把业务逻辑和表现内容放在一起,会增加代码的复杂度和维护成本.模板作用即是承担视图函 ...
随机推荐
- iOS:用Block写一个链式编程
一.介绍 链式编程是一个比较新颖的编程方式,简单直观,用起来也比较舒服.目前比较有名的Mansory和BabyBlueTooth就是使用链式编程写的第三方框架. 二.写法 链式编程写法不同于传统方式, ...
- 新鲜:阿里云的DataV数据可视化技术可以用起来
直接通过拖拽+关联的方式就可以比较方便的做出下面这种大屏展示数据的界面 只要阿里云上购买DataV数据可视化套件(https://data.aliyun.com/experience/case8? ...
- 几种php加速器比较
一.PHP加速器介绍 PHP加速器是一个为了提高PHP执行效率,从而缓存起PHP的操作码,这样PHP后面执行就不用解析转换了,可以直接调用PHP操作码,这样速度上就提高了不少. Apache中使用mo ...
- MySQL查看数据库表容量大小
本文介绍MySQL查看数据库表容量大小的命令语句,提供完整查询语句及实例,方便大家学习使用. 1.查看所有数据库容量大小 select table_schema as '数据库', sum(table ...
- 【Mac使用系列】常用软件及快捷键
Mac下配置ss: 下载地址:https://github.com/shadowsocks/shadowsocks-iOS/releases 旧版本:https://blog.csdn.net/vqh ...
- python2判断编码格式
def getCoding(strInput): ''' 获取编码格式 ''' if isinstance(strInput, unicode): return "unicode" ...
- SNF快速开发平台--规则引擎介绍和使用文档
设计目标: a) 规则引擎语法能够满足分单,计费,WMS策略的配置要求.语法是一致和统一的 b) 能够在不修改规则引擎模块的情况下,加入任意一个新的规则:实现上述需求之外的规则配置需求 c) 运算速度 ...
- 处理用千牛导出淘宝数据,供Logstash到Elasticsearch使用。(NodeJS)
var rf=require("fs"); // 加载编码转换模块 //npm install iconv-lite var iconv = require('iconv-lite ...
- ES6,Array.of()函数的用法
ES6为Array增加了of函数用已一种明确的含义将一个或多个值转换成数组. 因为,用new Array()构造数组的时候,是有二意性的. 构造时,传一个参数,表示生成多大的数组. 构造时,传多个参数 ...
- Paxos算法1-算法形成理论[转载]
地址 http://blog.csdn.net/chen77716/article/details/6166675 中文wiki http://zh.wikipedia.org/zh-cn/Paxos ...