Web框架flask---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>

最后我们看看运行的效果(传参使用效果!)

在这里插入图片描述

Jinja2模板蹭一下就会了,很快啊!

来,骗,来,偷吸

马老师垫底

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值