文章目录
- 1. `{% if %}` 和 `{% else %}`
- 2. `{% for %}` 和 `{% endfor %}`
- 3. `{% ifchanged %}` 和 `{% endifchanged %}`
- 4. `{% block %}` 和 `{% endblock %}`
- 5. `{% filter %}` 和 `{% endfilter %}`
- 6. `{% macro %}` 和 `{% endmacro %}`
- 7. `{% include %}`
- 8. `{% set %}`
- 9. `{% with %}` 和 `{% endwith %}
- 10. `{% autoescape %}` 和 `{% endautoescape %}`
Jinja2 模板引擎提供了多种控制结构,用于控制模板的逻辑流程。以下是 Jinja2 中常用的控制结构:
1. {% if %}
和 {% else %}
{% if %}
用于条件判断,{% else %}
用于条件不成立时的处理。
{% if user.is_authenticated %}
Welcome, {{ user.username }}!
{% else %}
Please log in.
{% endif %}
2. {% for %}
和 {% endfor %}
{% for %}
用于迭代序列,{% endfor %}
用于结束循环。
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% else %}
<li>No items found</li>
{% endfor %}
</ul>
3. {% ifchanged %}
和 {% endifchanged %}
{% ifchanged %}
用于检查当前值是否与之前的值不同,如果不同则执行其中的代码块。
{% for item in items %}
{% ifchanged item.category %}
<h2>{{ item.category }}</h2>
{% endifchanged %}
<p>{{ item.name }}</p>
{% endfor %}
4. {% block %}
和 {% endblock %}
{% block %}
和 {% endblock %}
用于模板继承,允许你定义可在子模板中重写的块。
{# base.html #}
<html>
<body>
<div id="content">
{% block content %}{% endblock %}
</div>
</body>
</html>
{# child.html #}
{% extends "base.html" %}
{% block content %}
<h1>Welcome to our website!</h1>
{% endblock %}
5. {% filter %}
和 {% endfilter %}
{% filter %}
用于应用过滤器,{% endfilter %}
用于结束过滤器的应用。
{% filter upper %}
This text will be converted to uppercase.
{% endfilter %}
6. {% macro %}
和 {% endmacro %}
{% macro %}
用于定义宏(类似于函数),{% endmacro %}
用于结束宏的定义。
{% macro render_post(post) %}
<h1>{{ post.title }}</h1>
<div>{{ post.content }}</div>
{% endmacro %}
{# 使用宏 #}
{{ render_post(post) }}
7. {% include %}
{% include %}
用于在模板中包含其他模板的内容。
{% include 'header.html' %}
<h1>Welcome to our website!</h1>
{% include 'footer.html' %}
8. {% set %}
{% set %}
用于在模板中设置变量。
{% set navigation = ['home', 'about', 'contact'] %}
9. {% with %}
和 `{% endwith %}
{% with %}
用于设置一个临时的变量,{% endwith %}
用于结束临时的变量作用域。
{% with total=business.employees|length %}
We have {{ total }} employees.
{% endwith %}
10. {% autoescape %}
和 {% endautoescape %}
{% autoescape %}
用于控制自动转义行为,{% endautoescape %}
用于结束自动转义的作用域。
{% autoescape false %}
{{ body }}
{% endautoescape %}