jinjia语法类似于JavaWeb中的jsp。可以以特定语法规则直接在html中与后台产生交互,并实现一些简单的逻辑操作。
- 后台函数
@blog.route("/blog")
def blog():
data = [...]
return render_templates("index.html", data=data)
- 变量表示
{{ data[0] }}
- if判断
{% if data %}
<p>{{ one }}<p>
{% endif %}
- for循环
{% for one in data %}
<p>{{ one }}<p>
{% endfor %}
- block块
使用block块,我们可以定义一个模板html,实现页面风格的统一
base.html
<!DOCTYPE html>
<html lang="en">
<head>
<title>{% block title %}Title{% endblock %}</title>
</head>
<body style="background-color:#eeeeee">
<!--页头-->
<div id="divHead" class="row" style="background-color: #4d91a1">
</div>
<!--内容块-->
{% block content %}
{% endblock %}
<!--页尾-->
<div class="row" style="background-color: #333333; width: 100%; height: 40px; position: fixed; bottom: 0px"></div>
<script src="/static/plugin/jquery/jquery-1.9.1.min.js"></script>
<script src="/static/plugin/bootstrap-3.3.7/js/bootstrap.min.js"></script>
<!--JS加载块-->
{% block js %}
{% endblock %}
</body>
</html>
在base.html中定义的block块,均可在被继承的页面中覆写
extend.html
```html
<!-- 声明当前页面继承自base -->
{% extends 'base.html' %}
{% block title %}NewTitle{% endblock %}
{% block content %}
<p>NewHtml</p>
{% endblock %}
{% block js %}
<script src="/static/js/add.js"></script>
{% endblock %}
- macro宏
使用宏可以定义一个在html中使用的函数,函数获取参数,返回值(内容处理)或文本(动态元素)。我们可以将常用的函数放在一个html文件内,在需要使用的地方导入即可
- 定义一个宏集合 ‘_macro.html’
{# 定义一个可动态生成的input元素 #}
{% macro input(name,value='',type='text',size=20) %}
<input type="{{ type }}"
name="{{ name }}"
value="{{ value }}"
size="{{ size }}"/>
{% endmacro %}
- 使用宏
{% import '_macro.html' as macro %}
<label for="username">用户名:</label>
{{ macro.input('username') }}
- 自定义全局函数
自定义全局函数在python文件中定义,通过’add_template_global’方法传入模板使用
- 定义一个全局函数
def time_format(str_time):
return str_time.sub[0: 10]
app.add_template_global(time_format, "time_format")
- 在html中使用
{% time_new = time_format("2018-01-01 09:33:24") %}
<p>{{ time_new }}</p>