金贾模板

与 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>

以下分隔符用于不同的解释:

  • {% ... %} 表示声明
  • {{ ... }} 表示输出模板的表达式
  • {# ... #} 表示注释(不包含在模板输出中)
  • {# ... ## 意味着该行的其余部分应该被解释为一个声明