模板
模板:其实是一个包含响应文本的文件,其中用占位符(变量)表示动态部分,
告诉模板引擎其具体的值需要从使用的数据中获取
使用真实值替换变量,再返回最终得到的字符串,这个过程称为“渲染”
Flask是使用 Jinja2 这个模板引擎来渲染模板
使用模板的好处:
视图函数只负责业务逻辑和数据处理(业务逻辑方面)
而模板则取到视图函数的数据结果进行展示(视图展示方面)
代码结构清晰,耦合度低。
了解了什么是模板以及模板的作用,下面我们来看看模板的简单语法使用:
在使用网页模板首先我们要导入:
Flask提供的 render_template 函数封装了该模板引擎
render_template 函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值。
代码如下:
# -*- encoding: utf-8 -*- #网页模板需要导入render_template from flask import Flask,render_template #建立对象 app=Flask(__name__) @app.route('/') def index(): my_str = '你好世界' my_int=123 my_list=['万','丈','高','楼','平','地','起'] my_dict={'name':'xiaowang'} context={} context['my_str']=my_str context['my_int']=my_int context['my_list']=my_list context['my_dict']=my_dict #使用render_tempate模板来渲染文件,通过第二个参数传递数据变量 # return render_template('day3.html',my_str=my_str,my_int=my_int,my_list=my_list,my_dict=my_dict)
#下面还有一种比较简单的方法:
#通过**引用来嵌套dict直接传递给模板 return render_template('day3.html',**context) if __name__ == "__main__": app.run( debug=True)
现在我们要在项目下创建 templates 文件夹,用于存放所有的模板文件,并在目录下创建一个模板html文件。
代码如下:
在写代码的时候我先来介绍几个小语法:
{{ }} 来表示变量名,这种 {{ }} 语法叫做变量代码块
用 {% %} 定义的控制代码块,可以实现一些语言层次的功能,比如循环或者if语句
使用 {# #} 进行注释,注释的内容不会在html中被渲染出来
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>flask网页模板学习</title> </head> <body> <div> 这是我们第一个网页模板<br /> {# 这里是注释,最基本的模板语法输出一个变量 #} <br /> {{ my_str }} <br /> {# 模板语法可以做简单的运算操作 #} <br /> {{ my_int + 10 }} {# 模板语法可以用下标引用的方式输出list元素#} <br /> {{ my_list }} <br /> {# 模板语法可以通过调用key来输出value#}<br /> {{ my_dict["name"] }} {# 使用{%%}来定义简单的逻辑控制代码 #} {% if my_int%} 整形存在 {% else%} 不存在 {# 使用if判断,一定要有endif 来结束判断#} {% endif%} <ul> {# 使用for循环来遍历list#} {% for i in my_list%} <li>{{ i }}</li> {%endfor%} </ul> {# 使用 if for 嵌套来实现单双行背景色#} <table style="border:1px solid yellow"> {% for item in my_list%} {# 使用loop关键字可以调用循环的索引,来判断下标单双#} {% if loop.index % 2 == 0%} <tr style="background-color:red"> <td>{{ item }}</td> </tr> {% else %} <tr style="background-color:blue"> <td>{{ item }}</td> </tr> {% endif %} {% endfor %} </table> </div> </body> </html>
这里有几个注意点:
在使用 if 判断完毕后一定要有 endif 来结束
在使用 for 循环完毕后 也需要 endfor 来结束
{{ }} 来表示变量名
{% %} 可以实现一些语言层次的功能,比如循环或者if语句
{# #} 进行注释
这几个基本格式千万要仔细 不能出错。
网页模板的基本使用还有很多很多 这次就先写到这,下次继续补充。