Template

Template

自動更新 app.config['TEMPLATES_AUTO_RELOAD'] = True

動態變數

動態網頁操作上與django相似

# 單一變數
<h1>hello, {{ name }}! </h1>


# 迴圈
<ul>
    {% for comment in comments %}
        <li>{{ comment }}</li>
    {% endfor %}
</ul>

在flask中將變數傳送至template

# python3
@app.route('/hihi',methods = ['post'])  
def test_function():  
    name = 'strawberry'
    comments = ['1', '2', '3']
    # 把所有變數加入render_template
    return render_template('signForm.html', name=name, comments=comments)

將html以變數方式傳送至template

# 可避免轉碼情況發生
{{ 變數名稱|safe }}

參考連結: https://blog.csdn.net/lanchunhui/article/details/51570408 https://blog.csdn.net/three_co/article/details/78420213 https://stackoverflow.com/questions/3206344/passing-html-to-template-using-flask-jinja2

判斷式

和在python使用方式差不多,可使用<>、and or not之類的

{% if kenny.sick %}
   Kenny is sick.
{% elif kenny.dead %}
   You killed Kenny!  You bastard!!!
{% else %}
   Kenny looks okay --- so far
{% endif %}

迴圈

遍歷字典

{% for key, value in my_dict.items() %}
    <dt>{{ key }}</dt>
    <dd>{{ value }}</dd>
{% endfor %}

可使用else,當遍歷的參數為空或None。無法使用continue和break

{% for user in users %}
    <li>{{ user.username }}</li>
{% else %}
    <li><em>no users found</em></li>
{% endfor %}

迴圈有些自帶的變數可以使用:

loop.index 循环迭代计数(从1开始)

loop.index0 循环迭代计数(从0开始)

loop.revindex 循环迭代倒序计数(从len开始,到1结束)

loop.revindex0 循环迭代倒序计数(从len-1开始,到0结束)

loop.first 是否为循环的第一个元素

loop.last 是否为循环的最后一个元素

loop.length 循环序列中元素的个数

loop.cycle 在给定的序列中轮循,如上例在”odd”和”even”两个值间轮循

loop.depth 当前循环在递归中的层级(从1开始)

loop.depth0 当前循环在递归中的层级(从0开始)

使用方式

{% for book in books %}
    <p>{{ loop.first }}</p>
    <p>{{ loop.index }}</p>
    <p>{{ book }}</p>
{% endfor %}

Macro

類似在html使用function,方便又整齊,可以傳遞參數,但是不能有返回值

先定義input函式

{% macro input(name, value='', type='text') %}
    <input type="{{ type }}" name="{{ name }}" value="{{ value }}">
{% endmacro %}

使用時

<p>{{ input('username') }}</p>
<p>{{ input('password', type='password') }}</p>

import

可將macro內容用.html儲存,其他html可用import方式讀取並使用macro

{% import 'macro.html' as macro  %}
<tr>
    <td>用戶名:</td>
    <td>{{ macro.input('username') }}</td>
</tr>

或者

{% from "macro.html" import input %}
<tr>
    <td>密碼:</td>
    <td>{{ input("password",type="password") }}</td>
</tr>

include

將重複性高的html另外儲存,再用include讀取,就不用一直複製貼上相同的html惹

{% include 'header.html' %}
...
{% include 'footer.html' %}

set

在html文件上宣告變數來使用

{% set name='dog' %}
{% set navigation = [('index.html', 'Index'), ('about.html', 'About')] %}

這樣就可以使用和惹

with

可以用來限制set變數的效果範圍

{% with %}
    {% set foo = 42 %}
{% endwith %}
或者
{% with foo = 42 %}
    {{ foo }}
{% endwith %}

參考資料:

https://www.twblogs.net/a/5e9d77f96052e105765a65b4

Last updated