python--Flask学习(二)--jinja2模板

1、渲染jinja2模板和传参
(1)如何渲染模板

  • 模板放在’templates’文件夹下;

  • 从flask中导入’render_template’函数;

  • 在视图函数中,使用’render_template’函数渲染模板。**注意:**只需要填写模板的名字,不需要填写’templates’这个文件夹的路径。
    (2)模板传参数

  • 如果只有一个或少数参数,直接在’render_template’函数中添加关键字函数就可以了。
    示例代码如下:
    template.py

	@app.route('/')
	def index():
	    return render_template('index.html',username='***',gender='女',age='20')

index.html

	<!DOCTYPE html>
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <title>首页</title>
	    {{ username,gender,age}}//固定语法
	
	</head>
	<body>
	
	</body>
</html>
  • 如果有多个参数的时候,可以先把参数放在字典中,然后在’render_template’中使用两个星号(**),把字典转化成关键字参数传递进去,这样的代码更方便管理和使用。
    示例代码如下:
	@app.route('/')
	def index():
	    context ={
	        'username':'***',
	        'gender':'女',
	        'age': 20
	
	    }
	    return render_template('index.html',**context)

(3)在模板中,如果要使用一个变量,语法是:’{{params}}’;
(4) 访问模型中的属性或者是字典,可以通过’{{params.property}}‘的形式,或者是使用’{{params[‘age’]}}’。
(5)基本语法

    {{ 用来存放变量 }}
    {% 用来执行函数或者逻辑代码 %}

2、if判断
语法

	{% if XXX %}
	{% else %}
	{% endif %}

if判断的使用和python里的使用方法差别不大。
3、for循环遍历列表和字典
(1)字典的遍历,语法和’python’一样,可以使用’items()’、‘keys()’、‘values()’、‘iteritems()’、‘iterkey()’、‘itervalue()’;

	 {%for k,v in user.items()%}
	        <p>{{ k }}:{{ v }}</p>
	    {% endfor %}

(2)列表的遍历

	{% for website in websites %}
	        <p>{{ website }}</p>
	    {% endfor %}

一个案例练习:
app.py

	from flask import Flask,render_template
	
	app = Flask(__name__)
	@app.route('/')
	def index():
	    books =[
	        {'name':'西游记',
	         'author':'吴承恩',
	         'price':'100'},
	        {'name':'红楼梦',
	         'author':'曹雪芹',
	         'price':'100'},
	        {'name':'三国演义',
	         'author':'罗贯中',
	         'price':'100'}
	    ]
	    return render_template('index.html',books = books)
	
	
	if __name__ == '__main__':
	    app.run(debug=True)

模板 index.html

	<!DOCTYPE html>
	<html lang="en">
	<head>
	    <meta charset="UTF-8">
	    <title>Title</title>
	</head>
	<body>
	<table>
	    <thead>
	        <th>书名</th>
	        <th>作者</th>
	        <th>价格</th>
	    </thead>
	    <thbody>
	        {% for book in books %}
	            <tr>
	                <td>{{ book.name }}</td>
	                <td>{{ book.author }}</td>
	                <td>{{ book.price }}</td>
	            </tr>
	        {% endfor %}
	    </thbody>
	</table>
	</body>
	</html>

4、过滤器
(1)介绍

  • 可以在模板中对一些变量进行处理,在模板中,过滤器相当于是一个函数,把当前的变量传入到过滤器中,然后过滤器根据自己的功能,在返回相应的值,之后再把结果渲染到页面中。作用的对象是模板中的变量–{{parmas}};
  • 基本语法:{{ variable | 过滤器名字 }},使用管道符号’|'进行组合。

(2)default过滤器:如果当前变量不存在,可以指定默认值;
使用方式{{ value | default(‘默认值’)}},如果value这个key不存在,那么就会使用default过滤器提供的默认值,如果你想使用类似于python中判断一个值是否为False(例如:None、空字符串、空列表、空字典等),那么就必须要传递另外一个参数{{value|default(‘默认值’,boolean=True)}}。
可以使用or来替代default(‘默认值’,boolean=True),如:{{ signature or ‘此人很懒’}}

(3)自动转义过滤器

  • safe过滤器:可以关闭一个字符串的自动转义;
  • escape过滤器:对某一个字符串进行转义;
  • autoescape标签:可以对它里面的代码块关闭或开启自动转义。
	 {% autoescape off %}
	        ...代码块
	    {% endautoescape %}

(4)常见过滤器
在这里插入图片描述
5、自定义模板过滤器
过滤器本质上就是一个函数,如果在模板中调用这个过滤器,那么就会将这个变量的值作为第一个参数传给过滤器这个函数,然后函数的返回值会作为这个过滤器的返回值,需要使用到一个装饰器,@app.template_filter('cut')
示例代码:
python代码

	@app.template_filter('cut')
	def cut(value):
	    value = value.replace('hello','你好')
	    return value

html

	{{ article | cut }}

6、继承和使用block
(1)继承作用和语法

  • 作用:可以把一共同代码放在父模板中,避免每个模块写相同的代码;
  • 语法:
{% extends 'base.html' %}

(2)block实现:

  • 作用:可以让子模板实现一些自己的特定需求,但是父模板需要提前定义好;
  • **注意:**子模板中的代码,必须放在block中。
  • 语法:
{% block main%}{% endblock %}

7、url链接和加载静态文件
(1)url链接:使用’url_for(视图函数名称)’,可以反转成url;
(2)语法:<a href={{ url_for('login') }}>登录</a>
8、加载静态文件
(1)flask结构中的static主要用来存放静态文件,主要包含CSS样式文件,js脚本,图片和字体等;
(2)语法:url_for('static',filename='路径')
(3)加载静态文件时,flask会从’static’这个文件夹中去找,所以不用在写’static’这个路径了;
(4)示例加载css样式:

 <link rel="stylesheet" href="{{ url_for('static',filename='css/index.css' )}}">
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值