金贾模板
与 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>
以下分隔符用于不同的解释:
{% ... %}
表示声明{{ ... }}
表示输出模板的表达式{# ... #}
表示注释(不包含在模板输出中){# ... ##
意味着该行的其余部分应该被解释为一个声明