Jinja 模板
模板语言(templationg language)中会把变量传递给模板。在Jinja中变量名是由变量代码块(variable block){{}}来表示的,另外还有控制代码块(control block){% %}
过滤器
因为很多python的函数在jinjia中不可以使用,所以jinjia中有很多内建的函数
内置过滤器
过滤器 | 解释 | 例子 | 结果 |
---|---|---|---|
default | 如果变量是None则返回默认值 | {{ var | default(‘str’) }} |
escape | 把HTML标签转义 | {{ “name” | escape }} |
safe | 与escape相反,不转义HTML | ||
float | 以浮点数显示 | {{ 10 | float }} |
init | 以整形显示 | {{ 10.1 | int }} |
join | 拼贴字符串 | {{ [‘a’,’b’] | join(‘,’) }} |
length | len() | {{ “ab” | length }} |
round | 四舍五入(common,floor,ceil) | {{ 10.11 | round(1, “common”) }} |
title | 大写首字母 | {{ “name is” | title }} |
tojson | 转化为json | ||
truncate | 截断字符串,并添加省略号 | {{ “aaaaaaaaaa” | truncate(4) }} |
自定义过滤器
在mian函数中定义相关的函数,并添加到jinja_env对象的filter字典中
注释
{# #}中的代码不会被渲染
渲染模板
from flask import Flask, render_template
@app.route('/user/<name>')
def user(name):
return render_template('user.html', name=name)
名,之后的都是键值对,表示传入模板的变量
模板传参
1.模板参数
直接嵌套在html里面,传入的是该路由定义方法里面的参数
{{ argv }}
过滤器的最大作用就是处理含有标签的字符串,jinja2会转义所有的变量,比如\
{% if title %}
...
{% else %}
...
{% endif %}
...
过滤器也可以同if语句一起使用
{% if str | length >0 %}
{% endif %}
3.循环语句
{% for name in names %}
...
{% endfor %}
循环也可以同if语句一起使用
{% for name in names if name | length >0 %}
...
{% endfor %}
loop
loop是在循环中的一个特殊变量,可以查看循环的相关信息
{% for name in names %}
{{ loop.index }}. {{name}} #显示迭代次数
{% endfor %}
变量 | 描述 |
---|---|
loop.index | 当前迭代序号,从1开始 |
loop.index0 | 当前迭代序号,从0开始 |
loop.revindex | 当前迭代逆序号,从1开始 |
loop.revindex0 | 当前迭代逆序号,从0开始 |
loop.first | 如果是第1个,则返回True |
loop.last | 如果是最后1个,返回True |
loop.length | 返回迭代器的长度 |
loop.cycle | 迭代辅助函数 |
loop.depth | 递归循环的深度,从1开始 |
loop.depth0 | 递归循环的深度,从0开始 |
4.模板继承
被继承模板中标明继承模板的插入位置
{% block content %}{% endblock %}
例子:
<html>
<head>
</head>
<body>
<a href="/index">hr下面是继承的插入位置</a>
<hr>
{% block content %}{% endblock %}
</body>
</html>
在继承文件中标明要继承的对象
{% extends "继承的对象" %}
{% block content %}
继承的内容
{% endblock %}
5.导入模板代码
{% include 'common.html' %}
6.函数
{% macro render_comment(comment) %} # 定义一个函数这里macro相当于def
<li>{{ comment }}</li>
{% endmacro %}
也可以做成一个包在其他地方导入
{% import 'macros.html' as macros %}
7.Flask特有的变量
{{ config.SQLALCHEMY_DATABASE_URI }} # config
{{ request.url }} # request
{{ session.new }} # session
{{ url_for('index') }}