python 宏定义_Flask干货:Jinja2模板中的宏定义和使用
前面总拿小明和小红做例子,他俩都烦了,所以这次咱们开门见山,先思考一个问题:平时我们上淘宝、上知乎,网站是怎么验证身份的呢?
很多小伙伴肯定会大声说:用户名和密码啊!没错,那网页上是如何实现的呢?
很简单,用户输入用户名和密码后,将它们打包发送给服务器,服务器校验后即可登录。为了方便,我们可以用宏(Macro)。
一、宏的定义
Jinja2中的宏功能有些类似于传统程序语言中的函数,跟python中的函数类似,可以传递参数,但不能有返回值,有声明和调用两部分。让我们先声明一个宏:
<!--宏定义-->
{% macro input(name, type='text', value='') -%}<input type="{{type}}" name="{{name}}" value="{{value|e}}">
{%- endmacro %}
上面的代码定义了一个宏,宏定义要加macro,宏定义结束要加endmacro标志。宏的名称就是input,它有3个参数,分别是name、type和value,后两个参数有默认值。调用时用下面这个表达式:
<p>用户名:{{ input('username') }}</p><p>密 码:{{ input('password', type='password') }}</p>
在工程中templates的文件夹下新建index.html文件,代码如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><title>宏的定义和使用</title>
</head>
<body>
<!--宏定义-->
{% macro input(name, type='text', value='') -%}<input type="{{type}}" name="{{name}}" value="{{value|e}}">
{%- endmacro %}
<!--宏的使用-->
<div style="color: #0000FF;"><p>用户名:{{ input('username') }}</p><p>密 码:{{ input('password', type='password') }}</p><p>登 录:{{ input('submit', type='submit', value='登录') }}</p>
</div>
</body>
</html>
Python文件中需要引入模板文件,如下:
from flask import Flask,render_templateapp = Flask(__name__)
@app.route('/')
def macro():return render_template('index.html')if __name__ == "__main__":app.run(debug=True)
在命令行执行文件就可以看到登录界面了:
二、宏的导入
一个宏可以被不同的模板使用,所以可以将其声明在一个单独的模板文件中,需要使用时导入即可。
导入的方法类似于python中的import,在templates文件夹下修改index.html文件,并新建form.html文件存储宏。index.html文件代码如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><title>宏的定义和使用</title>
</head>
<body>
{% import 'form.html' as form %}
<div style="color: #0000FF;"><p>用户名:{{ form.input('username') }}</p><p>密 码:{{ form.input('password', type='password') }}</p><p>登 录:{{ form.input('submit', type='submit', value='登录') }}</p>
</div>
</body>
</html>
form.html代码如下:
{% macro input(name, type='text', value='') -%}<input type="{{type}}" name="{{name}}" value="{{value|e}}">
{%- endmacro %}
上面的代码用于单独存放宏,使用{% import 'form.html' as form %}方法可以将其导入到index.html文件中。Python文件与前面相同,命令行运行后得到相同的结果:
三、include的使用
宏文件不仅可以被引用,还可以引用其他宏。Include语句可以把一个模板引入到另一个模板中,类似于把一个模板模板的代码复制到另外一个模板的指定位置。下面通过一个实例来说明。
在templates文件夹下修改index.html文件,并新建header.html文件和footer.html。index.html文件代码如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><title>Title</title><style>.header{width:100%;height:40px;margin:20px 20px;}.footer{width:100%;height:40px;margin:20px 20px;}.content{width:100%;height:40px;margin:20px 20px;}</style>
</head>
<body>
{% include "header.html" %}
<div class="content">这是网页内容!
</div>
{% include "footer.html" %}
</body>
</html>
header.html文件内容如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><title>Title</title>
</head>
<body>
<div class="header">这是网页头部!
</div>
</body>
</html>
footer.html文件内容如下:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="utf-8"><title>Title</title>
</head>
<body>
<div class="footer">这是网页尾部!
</div>
</body>
</html>
可以看出,include把一个模板的代码复制到另外一个模板的指定位置,{% include "header.html" %}和{% include "footer.html" %}把头文件和尾文件引入到index.html文件中。
以上就是关于宏功能的应用。此外,细心的小伙伴可能会发现,点击提交按钮并没有什么用,原因是我们只是进行了设计,并没有提交数据功能和验证功能,在今后的学习中将会讲到。
网页中相同的部分很多,反复写相同的代码不仅可能会出错,还浪费时间让程序员无比厌倦,为了让程序整洁一致,下一次我们将介绍模板的继承。
python 宏定义_Flask干货:Jinja2模板中的宏定义和使用相关推荐
- Flask Jinja2 模板中的变量和过滤器
Flask Jinja2 模板中的变量和过滤器 Flask 可以在视图函数中返回模板文件,模板引擎默认使用的是 Jinja2 . 通常,返回的 Jinja2 模板文件并不是一个静态的页面,而是同时有静 ...
- Flask mysql 模版传参_Flask渲染Jinja2模板和传参
### Flask渲染Jinja2模板和传参: 1. 如何渲染模板: * 模板放在`templates`文件夹下 * 从`flask`中导入`render_template`函数. * 在视图函数中, ...
- 单片机c语言怎么定义字符串,单片机C语言中变量的定义方法解析
1.C语言中变量的定义方法 -C语言中变量定义语法为: #pragma rambank0 :即以关键词#pragma开始,rambank0指明资料区块为第0块. unsigned char m_acc ...
- 如何在Python中将数据插入到Word模板中生成一份Word文档
在一些的项目开发中,会有一些生成Word文件的操作,比如将获取到的一些数据添加到Word模板当中的相应的位置生成一份Word文档. 由于最近的Python项目当中需要将一些从服务器查出的数据添加到Wo ...
- python mysqldb安装_Flask干货:访问数据库——Python数据库框架MySQLPython
图 | 源网络文 | 5号程序员 上一次我们学会了数据库安装,但只是安装好没教大家怎么使用! 嘿,别担心,这不有我呢嘛. 今天就由我给大家介绍介绍框架MySQL-Python. 01 MySQL-Py ...
- python flask html模板,python flask web开发实战 Jinja2模板
templates/index.html Hello World! templates/user.html Hello, {{ name }}! 渲染模板: from flask import Fla ...
- 如何在米拓的metinfo的模板中加入自己定义的样式
在template目录下启用的模板目录里,比如metv7,找到需要添加代码的模板文件,模板文件中的<include file="head.php" />已经包含了met ...
- matlab定义字母常数,在matlab中,如何定义函数式子中的未知常数。
新建一个.m文件,第一行输入下面的格式function [y,m] = abc(x)其中... 定义未知数:syms xx是变量 .syms是定义符号变量.补充:syms是... 这不是解方程,这是曲 ...
- Python之 jinja2模板浅析
目录 前言 1. jinja2介绍 1.1 jinja2的优点 1.2 安装jinja2 2. jinja2语法 2.1 基本语法 2.2 jinja2变量 2.3 jinja2中的过滤器 3. ji ...
- Flask后端笔记(三)Jinja2模板、过滤器、表单、宏、模板继承、包含
Flask后端笔记 Jinja2模板 基本流程 变量 过滤器 字符串过滤器 支持链式使用过滤器 列表过滤器 自定义过滤器 表单 不使用Flask-WTF扩展时,表单需要自己处理 使用Flask-WTF ...
最新文章
- 最长不下降子序列(推广问题)
- Python3学习笔记——类
- 基于c#的相关性分析_开源Math.NET基础数学类库使用(11)C#计算相关系数
- Debug Tensorflow: yolo模型检测框位置正确但类别不正确
- mysql binlo 抽取_使用mysqlbinlog根据时间点提取SQL简单方法
- c++ 图的连通分量是什么_学习数据结构第五章:图(图的遍历操作)
- html5实现3d翻页效果,利用css3 3d transform制作超逼真翻书效果
- 检查两个列表在Java中是否相等
- VUE学习和开发中的注意点总结(一),便于回顾(不断完善补充。)
- 利用jquery.validate异步验证用户名是否存在
- nodejs中md5加密模块
- bugzilla发送邮件慢的问题
- plcst语言编程教程_st语言编程实例讲解
- 巴厘岛最全的美食攻略
- CERT_HAS_EXPIRED
- 企业微信第三方应用添加好友
- 做饭真的很简单!做饭扫盲贴!
- C语言基础--决策与判断
- 阿里技术专家花3年写的《MySQL笔记》解决了70%数据库面试难题,网友:非常棒!
- eve-ng模拟器安装在部署使用
热门文章
- django使用ajax传输数据
- Android StickHeaderRecyclerView - 让recyclerview头部固定
- Shell脚本 小程序演示
- JQuery中ajax用法
- 了解protected 以及公用、私有和受保护的继承
- android控件布局
- C#抓取网页数据、分析并且去除HTML标签(转载)
- spring源码 第二个后置处理器方法的使用-推断构造函数
- mysql大数据量的分页查询优化
- Guava学习笔记之Maps(1):Maps.uniqueIndex(Iterable, Function)