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/