Flask开发(七)Jinja2模板 宏的定义及使用
内容纲要
本篇导读:
- 宏的定义
- 宏的导入
- include的使用
Jinja2中的宏功能有些类似于传统编程语言中的函数,他跟Python中的函数类似,可以传递参数,但是不能有返回值,可以将一些常用的代码片段放到宏中,然后把一些不固定的值抽取出来作为一个变量。
宏的定义
宏(MACRO),有声明和调用两个部分。让我们声明一个宏:
{% macro input (name,type='text',value=' ') -%} <input type="{{ type }}" name="{{ name }}" value="{{ value }}"> {% endmacro %}
上面代码定义了一个宏,定义宏要加macro,红顶已结束要加endmcro标志,宏的名称就是input,他有三个参数,后两个参数有默认值,我们可以使用表达式来调用这个宏:
{{ input('username') }} {{ input('passwd',type='password') }}
下面一个示例使用宏实现了一个简单的登录页面,将index.html代码修改如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <!-- 定义宏 --> {% macro input (name,type='text',value=' ') -%} <input type="{{ type }}" name="{{ name }}" value="{{ value }}"> {% endmacro %} <!-- 使用宏 --> <div style="color: #0000FF"> <p>用户名:{{ input('username') }}</p> <p>密码:{{ input('passwd',type='password') }}</p> <p>登录:{{ input('submit',type='submit',value='登录') }}</p> </div> </body> </html>
执行网页后,生成的对应代码如下:
<p>用户名:<input type="text" name="username" value=" "></p> <p>密码:<input type="password" name="passwd" value=" "></p> <p>登录:<input type="submit" name="submit" value="登录"></p>
app.py中的代码如下:
from flask import Flask,render_template app = Flask(__name__) @app.route('/') def hello_world(): return render_template('index.html') if __name__ == '__main__': app.run()
运行程序,使用浏览器访问http://127.0.0.1:5000/,结果如下:
宏的导入
一个宏可以被不同的模板使用,所以我们建议将其声明在一个单独的模板文件中。需要使用时导入即可,而导入的方法类似于Python中的import。下面我们把刚才的宏定义部分单独放在一个文件中。
在templates文件夹中创建文件form.html。
{% macro input (name,type='text',value=' ') -%} <input type="{{ type }}" name="{{ name }}" value="{{ value }}"> {% endmacro %}
将index.html中的代码修改如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> {% import 'form.html' as form %} {# {% form 'form.html' import input %}#} <div style="color: #0000FF"> <p>用户名:{{ form.input('username') }}</p> <p>密码:{{ form.input('passwd',type='password') }}</p> <p>登录:{{ form.input('submit',type='submit',value='登录') }}</p> </div> </body> </html>
app.py文件中的代码不变,运行效果和上面一样。
include的使用
宏文件中引用其他宏,可以使用include语句。include语句可以把一个模板引入到另一个模板中,类似于把一个模板的代码复制到另一个模板的指定位置。下面通过一个实例来说明。
在templates中创建header.html、footer.html。
index.html中的代码如下:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <style type="text/css"> .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>
app.py文件内容如下:
from flask import Flask,render_template app = Flask(__name__) @app.route('/') def hello_world(): return render_template('index.html') if __name__ == '__main__': app.run()
运行效果如下:
阅读剩余
版权声明:
作者:雪落长安
链接:https://blog.wlbc321.cn/index.php/2021/05/19/flask7/
文章版权归作者所有,未经允许请勿转载。
THE END