Flask教程--第一個Flask應用:模板

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 %}
        &copy; 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/

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章