赞
踩
Jinjia2是基于python的一个引擎,Flask使用jinja2作为框架的模板系统。
在Jinjia2中{{ 变量名 }}用来装载变量,模板渲染的时候,会把这个变量代表的值替换掉。并且可以间接访问一个变量的属性或者一个字典的key。关于点.号访问和[]中括号访问,没有任何区别,都可以访问属性和字典的值。
在Jinjia2中{% 控制语句 %}用来装载一个控制语句,例如if语句、for循环语句等。
在Jinjia2中{# 注释 #}用来装载一个注释,模板渲染的时候会忽视这中间的值。
我们如果需要在导入的html文件中装载python文件中的变量,就需要首先对变量进行渲染,再通过{{ 变量名 }}的方式在html页面中装载,例如,我们新建一个app.py实例文件,并写入以下代码,
from flask import Flask, render_template app = Flask(__name__) @app.route('/variables/') def variables(): contest = { 'name': 'wangdaye', 'age': 75, 'country': 'China', 'children': { 'name': 'yuqian', 'age': 48, } } # contest为要渲染的内容 return render_template('variables.html', **contest) # 第二个参数为对contest字典进行渲染 if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=8080)
我们再新建一个variables.html文件,代码如下,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>变量的装载</title>
</head>
<body>
<p>{{ name }}</p> // 通过{{ name }}将contest中的name键对应的值装载进来
{# 通过{{ name }}将contest中的name键对应的值装载进来 #} // 这是注释
<p>{{ age }}</p>
<p>{{ country }}</p>
<p>{{ children['name'] }}</p> // 使用[]对children中的name键进行访问
<p>{{ children.age }}</p> // 使用.对children中的age键进行访问
</body>
</html>
在Jinjia2中{% 控制语句 %}用来装载一个控制语句。
下面我们来加载一个if控制语句,新建一个app.py实例文件,代码如下,
from flask import Flask, render_template, request, redirect, url_for app = Flask(__name__) @app.route('/if/') def if_control(): contest = { 'name': 'zhangsan', 'age': 20 } return render_template('if.html', **contest) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=8080)
我们再新建一个if.html文件,代码如下,
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>if控制语句</title> </head> <body> {% if name %} // 判断name变量是否为真,注意这里变量无需通过{{ 变量名 }}的方式来表示 <p><b>您好,{{ name }}!</b></p> {% endif %} {% if age >= 18 %} // 判断age变量是否大于18 <p><b>成年人</b></p> {% else %} <p><b>未成年人</b></p> {% endif %} </body> </html>~
下面我们来加载一个for控制语句,与上例相同,新建一个app.py实例文件,代码如下,
from flask import Flask, render_template, request, redirect, url_for app = Flask(__name__) @app.route('/for/') def for_control(): contest = { 'books': [ { 'name': '三国演义', 'author': '罗贯中', 'price': 70 }, { 'name': '西游记', 'author': '吴承恩', 'price': 70 }, { 'name': '红楼梦', 'author': '曹雪芹', 'price': 70 }, { 'name': '水浒传', 'author': '施耐庵', 'price': 70 } ] } return render_template('for.html', **contest) if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=8080)
新建一个for.html文件,代码如下,
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>for控制语句</title> </head> <body> <table> <tr> <th>书名</th> <th>作者</th> <th>价格</th> </tr> {% for book in books %} <tr> {% for value in book.values() %} <td>{{ value }}</td> {% endfor %} </tr> {% endfor %} </table> </body> </html>
我们看下面这个app.py实例文件和login.html、index.html文件,
from flask import Flask, render_template, request, redirect, url_for app = Flask(__name__) @app.route('/s/<id>') def login(id): contest = { 'id': id } return render_template('index.html', **contest) @app.route('/login/') def index(): return render_template('login.html') if __name__ == '__main__': app.run(debug=True, host='0.0.0.0', port=8080)
login.html,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>登陆页面</title>
</head>
<body>
<h2><a href="{{ url_for('login', id='zhangsan') }}">登录</a></h2>
</body>
</html>
index.html,
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>首页</title>
</head>
<body>
<h2>欢迎{{ id }}登录</h2>
</body>
</html>
我们这里从路径“/login/”进入,会出现一个超链接指向login()函数所在路径,即“/s/”,这里我们发现访问路径和login()函数存在一个id参数,所以,我们需要给url_for()函数添加新的参数,该参数会传递给访问路径和login()函数作为login()的id参数。之后,login()函数会对id参数进行渲染传递给index.html文件。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。