Flask模板引擎之Jinja2语法介绍
在Flask中,Jinja2是为构建动态web应用程序提供的一个模板引擎,可以轻松地将应用程序与HTML(或其他文本)集成,并在呈现页面之前修改动态内容。
变量
在Jinja2中,使用双大括号来包含变量名,如 {{ variable_name }}
。
<!DOCTYPE html>
<html>
<head>
<title>Flask Template Engine Jinja2 Example</title>
</head>
<body>
<h1>Welcome {{name}}, to Flask Template Engine Jinja2 Example</h1>
</body>
</html>
在Flask应用程序中,可以使用 render_template
函数来向模板传递变量。
from flask import Flask, render_template
app = Flask(__name__)
@app.route('/')
def home():
return render_template('index.html', name='John')
if __name__ == '__main__':
app.run(debug=True)
控制结构
条件
使用 {% if %}
和 {% endif %}
来执行条件操作。
{% if condition %}
<p>Condition is True</p>
{% else %}
<p>Condition is False</p>
{% endif %}
循环
使用 {% for %}
和 {% endfor %}
进行循环。
{% for item in items %}
<p>{{ item }}</p>
{% endfor %}
可以使用 {% for %}...{% else %}...{% endfor %}
来定义循环最后一项的处理方式,还可以使用 loop.index
和 loop.index0
来获取当前迭代的索引,分别是从1和0开始。
{% for item in items %}
<p>{{ loop.index }}: {{ item }}</p>
{% else %}
<p>No items to display.</p>
{% endfor %}
宏
使用 {% macro %}
和 {% endmacro %}
定义宏。
{% macro render_item(item) %}
<p>{{ item }}</p>
{% endmacro %}
然后在需要使用的地方使用 {{ macro_name(args) }}
命令调用宏。
{% for item in items %}
{{ render_item(item) }}
{% endfor %}
模板继承
使用 {% extends "parent_template.html" %}
来进行模板继承。
<!DOCTYPE html>
<html>
<head>
{% block head %}
<title>{% block title %}Flask Template Engine Jinja2 Example{% endblock %}</title>
{% endblock %}
</head>
<body>
{% block content %}
<h1>Welcome, to Flask Template Engine Jinja2 Example</h1>
{% endblock %}
</body>
</html>
在子模板中可以重写父模板中的模块。
{% extends "base.html" %}
{% block title %}Home{% endblock %}
{% block content %}
<h2>Welcome!</h2>
<p>This is my home page.</p>
{% endblock %}
示例
{% extends "base.html" %}
{% block title %}Articles{% endblock %}
{% block content %}
{% if articles %}
<ul>
{% for article in articles %}
<li><a href="{{ url_for('article', id=article.id) }}">{{ article.title }}</a></li>
{% else %}
<li>No articles to display.</li>
{% endfor %}
</ul>
{% endif %}
{% endblock %}
{% macro render_comment(comment) %}
<div class="comment>
<h3>{{ comment.author }}</h3>
<p>{{ comment.content }}</p>
</div>
{% endmacro %}
{% extends "base.html" %}
{% block title %}Article {{ article.id }}{% endblock %}
{% block content %}
<h2>{{ article.title }}</h2>
<p>{{ article.content }}</p>
{% if comments %}
{% for comment in comments %}
{{ render_comment(comment) }}
{% else %}
<p>No comments to display.</p>
{% endfor %}
{% endif %}
{% endblock %}
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Flask模板引擎之Jinja2语法介绍 - Python技术站