Python-web 框架flask----Jinja2模板语言

Jinja2是Python Web编程主流模板语言,安装flask时会自动安装。本文介绍了如何渲染模板,包括从flask导入render_template函数;模板传参的两种方式;基本语义,如变量、逻辑控制等;还讲解了模板继承、过滤器的使用及宏的处理。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 

Jinja2是Python Web编程中的主流模板语言。因为flask是基于Jinja2和Werkzeug发展而来,在安装flask的时候jinja2自动就被装在上面了。【Jinja2官方文档】

如何渲染模板

 模板在‘templates’文件夹下(htnl页面)

从flask中导入render_template函数---渲染html模板

在视图函数中,使用render_template 函数渲染模板。注意:只需要填写模板的名字,不需要填写templates这个文件夹的路径,若在templates下面建立文件夹,则需要填写路径名称

# 1.导入依赖包
from flask import Flask, render_template
    # 2.实例化app
    app = Flask(__name__)
    # 3.映射,默认情况下flask从templates文件夹中寻找模板文件(index.html)
    @app.route('/')
    def index():
        return render_template('index.html')
    @app.route('/user/<param>')
    def user(name):
        return render_template('index.html', param=param)

模板传参

(1)如果只有一个或者少量参数,直接在render_template函数中添加关键字参数就可以了。

(2)如果有多个参数的时候,那么可以先把所有的参数放在字典中,然后在render_template中, 使用两个星号,把字典转换成关键参数传递进去,这样的代码更方便管理和使用。

 基本语义:

看过之前模板的例子就知道,Jinja2做构成的模板文件中,文本内容大致可以分成几个种类。比如特殊文本(不进行转义,比如HTML,XML格式的文本)、{{  }}表示的变量或者宏调用、{%  %}表示逻辑控制,{#  #}表示注释,其中内容不被模板引擎转义。

变量 {{..}}

列表 {% for item in List %}<li>{{item}}</li>{% endfor %}

字典 {% for k,v in Dict.items() %}<li>{{k}}{{v}}</li>{% endfor %}

模板继承

{% extends 'layout.html' %}
{% block body %}
{% endblock %}
{% include 'asd.html' %}

过滤器

过滤器简单理解:、过滤器的作用就是,如果有头像就显示头像,没有头像就显示默认的头像(无头像)过滤器的作用对象是变量      {{ avatar|default('xxx') }}  模板还支持{{ 变量 | 过滤器1 | 过滤器2 | ... }}这样的操作

以下说明中的第一个参数都是指通过管道传过去的值,实际写在管道右边的方法参数应该比下面说明中的少一个

safe: 渲染时不转义

lower: 把值转换成小写形式

upper: 把值转换成大写形式

attr(object,name)  比如account|attr("name")中account预期是一个字典(或者按照JS的说法是一个object),此时这个地方就是现实account['name']的值

capitalize(s)  把字符串的首字母大写,后面的全部小写

default(value,default_value=u'',boolean=False)设置默认值,如果没有给出value,那么就用default_value的值(即空字符串)

filesizeformat(value,binary=False)接受一个数值然后转化成容易阅读的字节形式比如1.3MB,305Byte等,{{size|filesizeformat() }}

float(value,default=0)  接受一个值并将其转化为float类型

escape(string)  把字符串中HTML特殊字符比如<,>,&等反转义成HTML的表达方式

groupby(value,attribute)  按照指定的共有属性将(一个字典组成的列表)集合进行分组,返回一个字典组成的列表。这个列表中的每个字典都有两项,第一项的key是grouper然后value是根据groupby区分后得到的那个原字典中key的值。说了一串自己都晕了,下面给个例子。。

int(value,default)  把值转化为一个int类型

join(value,sep=u'')  接受一个序列类型的对象,然后通过sep指定的字符将所有序列元素连接在一起成为一个字符串。sep默认是空字符串

last/first/random(seq)  返回序列的最后/最前/随机一个元素

replace(string,old,new,count=None)  接受一个字符串,将其中的old部分全部转化为new,从左到右替换count次,如果不指定count是只替换第一个扫描到的

reverse(value)  接受一个可迭代对象,然后返回其反序序列的迭代器

sort(value,reverse=False,case_sensative=False,attribute=None)  对可迭代的对象进行排序,默认情况下以升序大小写不敏感的方式排序。

striptags(value)  把一段比如XML格式的文本中的标签都去掉

sum(iterable,attribute=None,start=0)对可迭代对象进行求和,如果需要对其某个特定属性的值求和的话可以设置attribute属性

title(string)  将字符串转换为标题格式显示

trim(value)  去除开头和末尾的所有空格,相当于strip()

truncate(s,length=255,killwords=False,end='...')这是个比较有有意思的方法,它把字符串转化成简略形式,比如"foo bar"|truncate(5)可以得到foo ...,如果"foo bar"|truncate(5,True)可以得到foo b...

round(value,precision=0,method='common')保留几位小数、对数字进行四舍五入,precision表示小数点后保留几位。method除了common是四舍五入规则外,floor是向下抹平,ceil是向上抹平。

<!--定义宏-->
{% marco input(name,type='text',value='',size=20) %}
    <input type="{{ type }}"
           name="{{ name }}"
           value="{{ value }}"
           size="{{ size }}"
    />
{% endmarco %}

<!--调用宏-->
{{ input('username')}}
{{ input('password',type='password')}}

如果宏比较多,可以抽到单独的html中,再import进来

{% import '_marcos.html' as ui%}
...
{{ ui.input('username')}}

 

<p>自定义加法函数:{{add_num(1,4)}}</p>

<p>全局函数global:{{Global(1,4,5)}}</p>

<p>全局函数filter:{{1|Filter(1,4)}}</p>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值