金賈模板

與 Meteor.js 類似,Flask 與前端模板服務完美整合。Flask 預設使用 Jinja Templating。模板允許在 HTML 檔案中使用小的程式碼片段,例如條件或迴圈。

當我們渲染模板時,模板檔名之外的任何引數都會傳遞到 HTML 模板服務中。以下路由將使用者名稱和連線日期(從其他地方的函式)傳遞到 HTML。

@app.route("/users/<username>)
def profile(username):
    joinedDate = get_joined_date(username) # This function's code is irrelevant
    awards = get_awards(username) # This function's code is irrelevant
    # The joinDate is a string and awards is an array of strings
    return render_template("profile.html", username=username, joinDate=joinDate, awards=awards)

渲染此模板時,它可以使用從 render_template() 函式傳遞給它的變數。以下是 profile.html 的內容:

<!DOCTYPE html>
<html>
    <head>
        # if username
            <title>Profile of {{ username }}</title>
        # else
            <title>No User Found</title>
        # endif
    <head>
    <body>
        {% if username %}
            <h1>{{ username }} joined on the date {{ date }}</h1>
            {% if len(awards) > 0 %}
                <h3>{{ username }} has the following awards:</h3>
                <ul>
                {% for award in awards %}
                    <li>{{award}}</li>
                {% endfor %}
                </ul>
            {% else %}
                <h3>{{ username }} has no awards</h3>
            {% endif %}
        {% else %}
            <h1>No user was found under that username</h1>
        {% endif %}
        {# This is a comment and doesn't affect the output #}
    </body>
</html>

以下分隔符用於不同的解釋:

  • {% ... %} 表示宣告
  • {{ ... }} 表示輸出模板的表示式
  • {# ... #} 表示註釋(不包含在模板輸出中)
  • {# ... ## 意味著該行的其餘部分應該被解釋為一個宣告