flask之jinja2

jinja版本: jinja2.1.0

jinja2:
一.简介:
jinja2是Flask作者开发的一个模板系统,起初是仿django模板的一个模板引擎,为Flask提供模板支持。

二.语法
基本语法:
控制结构 {% %}
变量取值 {{ }}
注释 {# #}

1.变量取值 {{ }}:
jinja2模板中使用 {{ }} 语法表示一个变量,它是一种特殊的占位符。当利用jinja2进行渲染的时候,它会把这些特殊的占位符进行填充/替换,jinja2支持python中所有的Python数据类型比如列表、字段、对象等。

<p>this is a dicectory:{{ mydict['key'] }} </p>
<p>this is a list:{{ mylist[3] }} </p>
<p>this is a object:{{ myobject.something() }} </p>

2.控制结构 {% %}
2.1 if语句:

{% if daxin.safe %}
daxin is safe.
{% elif daxin.dead %}
daxin is dead
{% else %}
daxin is okay
{% endif %}

2.2 for循环:
jinja2中的for循环用于迭代Python的数据类型,包括列表,元组和字典。在jinja2中不存在while循环。
迭代列表:

<ul>
{% for user in users %}
<li>{{ user.username|title }}</li>
{% endfor %}
</ul>

迭代字典:

<dl>
{% for key, value in my_dict.iteritems() %}
<dt>{{ key }}</dt>
<dd>{{ value}}</dd>
{% endfor %}
</dl>

3. 模板集成 :extend和super()关键字
模板继承允许我们创建一个基本(骨架)文件,其他文件从该骨架文件继承,然后针对自己需要的地方进行修改。

3.1 extend : 继承骨架文件
3.2 block : 指定可以进行修改的区域
3.3 super() : 声明了super() 变量的block可以继承父级文件对应block的内容

'base.html'

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
{% block content %}
    <div>this is content</div>
{% endblock %}

{% block foot %}
    <div>this is foot</div>
{% endblock %}
</body>
</html>

'test.html'

{# 继承base.html文件 #}
{% extends 'base.html' %} 

{# 使用 super() 关键字继承‘base.html’中对应block的内容#}
{% block content %}
    {{ super()}}
    <div>this is content extend</div>
{% endblock %}

{# 未使用super() 关键字,不继承‘base.html’中对应block的内容#}
{% block foot %}
    <div>this is foot extend</div>
{% endblock %}

output:

this is content
this is content extend
this is foot extend

4.with关键字

限制变量的有效范围为{% with param %}与{% endwith %}之间

{% block foot %}
    {% with message=get_flashed_messages() %}
        {{ message }}
    {% endwith %}
{% endblock %}

5.过滤器:

过滤器可以理解为是jinja2里面的内置函数和字符串处理函数。

过滤器名称    说明    
default检查变量是否存在
length 渲染时值不转义
 lower 值转换成小写形式 
 upper 值转换成大写形式 
 title字符串中每个word首字母都转换成大写 'Szc Sss'
capitalize字符串首字母都转换成大写 'Sss sss'
 trim去掉值的首尾空格
join  拼接多个字符串
 replace 字符串替换
 round 默认对数字进行四舍五入,也可以用参数进行控制
int  把值转换成整型
....

过滤器使用: 只需要在变量后面使用管道(|)分割,多个过滤器可以链式调用,前一个过滤器的输出会作为后一个过滤器的输入。

{{ 'abc' | upper  }}
# ABC
 
{{ 'hello world' | title  }}
# Hello World
 
{{ "hello world" | replace('world','daxin') | upper }}
# HELLO DAXIN
 
{{ 18.18 | round | int }}

6.宏 :
宏类似于Python中的函数,我们在宏中定义行为,还可以进行传递参数。
使用macro关键字定义一个宏,后面跟其宏的名称和参数

定义宏:

{% macro input(name,age=18) %}   # 参数age的默认值为18
 <input type='text' name="{{ name }}" value="{{ age }}" >
{% endmacro %}

 引用宏

<p>{{ input('daxin') }} </p>
<p>{{ input('daxin',age=20) }} </p>

 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Flask是一个轻量级的Python Web框架,它基于Werkzeug和Jinja2构建而成。Flask的系统架构主要包括以下几个核心组件: 1. 路由系统:Flask通过路由系统来处理不同URL请求的映射关系。开发者可以使用装饰器来定义路由规则,指定URL和对应的处理函数。 2. 视图函数:视图函数是Flask中处理请求的核心部分。当匹配到对应的URL时,Flask会调用相应的视图函数来处理请求,并返回响应结果。 3. 模板引擎:Flask使用Jinja2作为默认的模板引擎,用于生成动态HTML页面。模板引擎可以将动态数据与静态模板进行结合,生成最终的HTML响应。 4. 请求-响应循环:Flask使用Werkzeug提供的请求-响应循环来处理HTTP请求和响应。在请求到达时,Flask会将请求封装成一个Request对象,并将其传递给对应的视图函数进行处理。视图函数返回的结果会被封装成一个Response对象,并发送给客户端。 5. 扩展插件:Flask提供了丰富的扩展插件,用于增强框架的功能。例如,Flask-WTF用于处理表单验证,Flask-SQLAlchemy用于数据库操作,Flask-Login用于用户认证等。 6. 上下文管理:Flask使用上下文管理来实现线程安全的请求处理。Flask提供了两种上下文:应用上下文和请求上下文。应用上下文保存了应用级别的信息,例如应用配置、数据库连接等;请求上下文保存了请求级别的信息,例如请求参数、用户信息等。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值