Jinja2模板引擎
为什么要使用模板?
在上一篇博客中,视图函数的主要作用是生成请求的响应,这是最简单的请求。实际上,视图函数有两个作用:处理业务逻辑和返回响应内容。Jinja2主要是返回响应内容。
简单来说,就类似于print(“jinja2 is %s”,string);
string 就是传进来的数据,然后我们使用它进行展示,而不是从网页的网址来获得这个参数。
只不过,%s是用占位变量名的形式出现!
使用模板的好处 |
---|
视图函数值负责业务逻辑和数据处理(业务逻辑方面) |
而模板则渠道视图函数的数据结果进行展示 |
代码结构清晰,耦合度低 |
两个概念+一个解释
Jinja2
是Python下一个被广泛应用的模板引擎,是由Python实现的模板语言,它的涉及思想来源于Django的模板引擎,并扩展了其语法和一系列强大的功能,其是Flask内置的模板语言。
模板语言:
是一种被涉及来自动生成文档的简单文本格式,在模板语言中,一般都会把一些变量传给模板,替换模板的特丁位置上预先定义好的占位变量名。
渲染模板函数
-
Flask提供的render_template函数封装了该模板引擎
-
render_template函数的第一个参数是模板的文件名,后面的参数都是键值对,表示模板中变量对应的真实值。
渲染模板函数使用的简单演示
我们创建一个带有模板的(render_template函数)的路由
这里不指定methods也是可以的,默认的GET也是满足我们的需求的
我们在这个路由里面定义了一个url_str并把它传到了前端中,那么前端可以把这个url_str 作为变量显示到前端中,这就是一种渲染
@app.route('/',methods=['GET','POST'])
def hello_world():
url_str='https://kamenrider41.gitee.io'
return render_template('index.html',url_str=url_str)
让我们康康,html文件中(index.html)中如何进行传递变量的使用
最终的效果图如图:
这个地方就把路由中传递的参数在网页上进行了显示,我们不妨大胆想象,我们传递的如果是动态的处理的数据,那么这个数据也就是可以变化的。当然这种局部刷新的技术应该还要用到ajax技术,当然也离不开路由的传参啦!ajax如何使用,我也还不会,我们可以一起成长!
- 我们使用的参数名字是路由中传过来的时候定义的
也就是render_template(‘index.html’,url_str =url_str)黄色的部分
在传递比较复杂的数据的时候,我们一般使用的都是json数据格式,如何将数据变成json格式呢?博主也还不会,我们可以一起学习,一起成长! - 还有这个使用参数的时候,用到了一个{{ }}这个就是下面提到的变量代码块!
如何使用?
html中添加注释
使用 {# #} 进行注释
比如:变量为name的注释
{# {{name}} #}
变量代码块
=={{ }}==来表示变量名,这种{{ }}语法叫做变量代码块
比如post.title的变量使用
{{ post.title }}
Jinja2模板中的变量代码块可以是认识Python类型或者对象,只要它能够被Python的str()方法转换为一个字符串就可以,比如,可以通过下面的方式显示一个字典或者列表中的某个元素:
{{your_dict['key']}}
{{your_list[0]}}
控制代码块
=={% %}==定义的控制代码块,可以实现一些语言层次的功能,比如循环或者if语句
{% if user %}
{{ user }}
{% else %}
hello!
{% for index in indexs %}
{{ index }}
{% endfor %}
Jinja2渲染模板的全面演示哦!
先看路由写法
@app.route('/',methods=['GET','POST'])
def hello_world():
# return render_template('index.html')
url_str='https://kamenrider41.gitee.io'
my_list= [1,3,5,7,9]
my_dict={
'name' : '钧桐',
'url' :'https://kamenrider41.gitee.io'
}
# 通常,模板中使用的变量名和要传递的数据的变量名保持一致
return render_template('index.html',
url_str=url_str,
my_list=my_list,
my_dict=my_dict)
再看html写法(主要看body中各种代码块的使用)
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
这是我的个人博客地址:<br>
{# 这是一个变量代码块 #}
{{ url_str}} <br>
{# 列表的使用 #}
{{ my_list}} <br>
{{ my_list.2 }} <br>
{# 字典的使用 #}
{{ my_dict }}<br>
{{ my_dict.url }}<br>
{{ my_dict.name }}<br>
<hr>
{# 控制代码块 #}
{# for循环的使用,建议写for,然后按tab进行补全 #}
{% for num in my_list %}
{# 数据大于3 才能显示 #}
{% if num>3 %}
{{ num }}<br>
{% endif %}
{% endfor %}
</body>
</html>