Flask使用的是Jinja2作为模板引擎。当然,也可以使用其它模板引擎。
{% ... %}
用于流程控制语句
{{ ... }}用于输出内容到模板
{# ... #}
用于注释
# ... ##
类似{% ... %}
<nav>
<h1>Flaskr</h1>
<ul>
{% if g.user %}
<li><span>{{ g.user['username'] }}</span>
<li><a href="{{ url_for('auth.logout') }}">退出</a>
{% else %}
<li><a href="{{ url_for('auth.register') }}">注册</a>
<li><a href="{{ url_for('auth.login') }}">登陆</a>
{% endif %}
</ul>
</nav>
一、变量
1.如果要访问变量的属性可以使用点(.),也可以使用[]符号.示例:
{{ foo.bar }} {{ foo['bar'] }}
2.如果变量的属性不存在,那么 会返回空字符串.
3.可以直接在模板使用的全局变量
全局变量 | 来源 | 含义 | 说明 |
config | flask.config | 当前配置对象 | |
request | flask.request | 当前请求对象 | 在没有请求上文的情况下渲染模板,则该变量不可用 |
session | flask.session | 当前会话对象 | 在没有请求上文的情况下渲染模板,则该变量不可用 |
g | flask.g | 请求绑定的全局变量 | 在没有请求上文的情况下渲染模板,则该变量不可用 |
url_for() | flask.url_for() | url反向解析函数 | |
get_flash_message() | flask._get_flash_message() | 获取闪现的消息的函数 |
二、过滤器
1.可以通过过滤器对变量的值进行修改.过滤器与变量用管道符(|)进行分隔.(同Django)
{{ name|striptags}}
2.可以同时使用多个过滤器.(同Django)
{{ name|striptags|title }}
3.使用圆括号给过滤器传递参数(区别:Django是使用冒号 : 给过滤器传递参数)
{{ my_variable|default('my_variable is not defined') }}
三、注释
模板使用 {# ... #} 注释.
{# note: commented-out template because we no longer use this
{% for user in users %}
...
{% endfor %}
#}
四、继承
1.模板使用形如{% extends "base.html" %}的形式进行继承.extends标签应该是模板的第一个标签.
基本模板:base.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html lang="en">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
{% block head %}
<link rel="stylesheet" href="style.css" />
<title>{% block title %}{% endblock %} - My Webpage</title>
{% endblock %}
</head>
<body>
<div id="content">{% block content %}{% endblock %}</div>
<div id="footer">
{% block footer %}
© Copyright 2008 by <a href="http://domain.invalid/">you</a>.
{% endblock %}
</div>
</body>
子模板:
{% extends "base.html" %}
{% block title %}Index{% endblock %}
{% block head %}
{{ super() }}
<style type="text/css">
.important { color: #336699; }
</style>
{% endblock %}
{% block content %}
<h1>Index</h1>
<p class="important">
Welcome on my awesome homepage.
</p>
{% endblock %}
2.同一个模板文件中,{% block %}{% endblock %}标签不能同名.模板文件中对block内容的调用,可以使用 {{ self.blockName() }}的方式。
{% block title %}注册{% endblock %}
{% block header %}
<h1>你现在所处的页面是:{{ self.title() }}</h1>
{% endblock %}
结果示例:
3.对父模板block内容的调用,可以使用{{ super() }}的方式
{% block sidebar %}
<h3>Table Of Contents</h3>
...
{{ super() }}
{% endblock %}
参考资料
[1]Flask templates,https://flask.palletsprojects.com/en/1.1.x/tutorial/templates/
[2]Jinja2:http://jinja.palletsprojects.com/en/2.10.x/templates/
[3]Jinja2中文文档:http://docs.jinkan.org/docs/jinja2/