{% endmacro %}2..._flask jinja2">
当前位置:   article > 正文

flask之jinja2入门_flask jinja2

flask jinja2

一、jinja2的基础使用

flask内置模板语言,设计思路来自于django引擎

1、flask中返回jinja2模板

@app.route('/index',methods=['GET','POST']
def	index():
	str='python'
	list1=[1,2,3]
	return render_template('temp.html',str1=str1,list1=list1)#返回页面及页面jinja2所需数据
if __name__='__main__':
	app.run(debug=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

利用字典传参

将所需的数据写进字典中,利用解包的方式传入参数,这样就不需要再写很长的返回参数了

@app.route('/index',methods=['GET','POST']
def	index():
	str='python'
	list1=[1,2,3]
	data={
		'str1':str1,
		'list1':list1
	}
	return render_template('temp.html',**data)
if __name__='__main__':
	app.run(debug=True)
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11

2、模板语言

{{ … }}:装载一个变量,模板渲染的时候,会使用传进来的同名参数这个变量代表的值替换掉。
{% … %}:装载一个控制语句,每个控制语句末尾都需要对应的end控制语句,控制变量包在控制语句和end控制语句之间
{# … #}:装载一个注释,模板渲染的时候会忽视这中间的值。

if语句
{% if newlist %}
{{newlist}}
{{ elif list1}}
{{list1}}
    {% else %}
    {{list2}}
    {% endif %}


  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

判断是否有newlist列表,如果有则返回newlist列表,否则返回list1列表

for语句
{% for i in list1 %}<br>
    {{i}}
    {% endfor %}
  • 1
  • 2
  • 3

用for循环输出list1中所有的元素

3、过滤器

{{ 变量名|过滤器 }}

1、常用自带过滤器

1、字符串
upper

将变量表示的字符串字母全部变成大写字母

reverse

反转字符串

lower

将变量中的字母全部变成小写

title

变量中的单词首字母大写

format

占位符填充,传入参数填入占位符

safe

取消转义,让数据不受特殊字符转义

truncate

截断字符串,指定某个字符串显示部分

2、列表
length

用于得到列表长度

first

用于取出列表首个元素

last

取出列表末尾元素

sort

排序列表

sum

列表中数字求和

2、自定义过滤器

1、定义过滤器函数
def list_reverse (ls):
    """ 自定义字符串反转 """
    ls.reverse()
    return ls

  • 1
  • 2
  • 3
  • 4
  • 5

一个普通的处理数据的函数

2、注册成为模板过滤器
1、使用函数进行注册
app.add_template_filter(list_reverse,'asd')
  • 1

第一个参数是过滤器函数,第二个参数是需要使用的名字

2、使用装饰器进行注册
@app.template_filter('lsreverse')
def list_reverse (ls):
    """ 自定义字符串反转 """
    ls.reverse()
    return ls

  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

直接在装饰器里写使用名

二、宏

用于提高代码复用率
最简单封装好的对象

1、宏的定义

使用macro定义

    {% macro func1(label='',type='text',name='') %}
    <label>{{label}}</label><input type="{{type}}" name="{{name}}">
    {% endmacro %}
  • 1
  • 2
  • 3

2、宏的使用

在同一页面上使用

直接在定义页面下写入如下代码

<form>
        {{func1('输入密码',type='password',name='pwd')}}
        {{func1('输入用户名',name='username')}}
    </form>
  • 1
  • 2
  • 3
  • 4

使用flask返回页面
在这里插入图片描述

在另一个页面调用宏
{% import 'temp3.html' as func_form %}
<form>
    {{func_form.func1('输入密码',type='password',name='pwd')}}
    {{func_form.func1('输入用户名',name='username')}}
</form>
  • 1
  • 2
  • 3
  • 4
  • 5

使用flask返回该页面,同样得到如下页面
在这里插入图片描述

三、继承

类似于面向对象中的类

1、模板页面

    {%block top%}
    这是第一个模块
    {%endblock%}
    {%block asd%}
    这是内容
    {%endblock%}
    {%block footer%}
    这是页脚
    {%endblock%}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9

2、调用模板

{% extends 'base.html' %}
  • 1

base.html为编写的模板页面

模板的修改

在当前页面修改完直接继承原模板

{% block alter %}
修改后的内容
{{super()}}
{% endblock %}
  • 1
  • 2
  • 3
  • 4

四、包含

直接将整个完整的页面加载到本页面

{% include 'index.html'}
  • 1
ignore missing

如果找不到指定的页面,则忽略

{% include 'index.html' ignore missing %}
  • 1
声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/羊村懒王/article/detail/191337
推荐阅读
相关标签
  

闽ICP备14008679号