jinja2详细的语法介绍
时间: 2023-11-11 18:07:02 浏览: 41
Jinja2是一个流行的Python模板引擎,用于生成动态的HTML、XML或其他格式的文档。下面是一些Jinja2的详细语法介绍。
## 变量
在Jinja2中,可以使用{{}}来包含变量。例如:
```
<p>Hello, {{ name }}!</p>
```
这里的`name`是一个变量,它将被替换为相应的值。如果变量不存在,它将被替换为空字符串。
## 过滤器
Jinja2中的过滤器用于修改变量的值。过滤器可以添加到变量后面,使用`|`符号分隔。例如:
```
<p>{{ message|capitalize }}</p>
```
这里的`capitalize`过滤器将把`message`的第一个字母转换为大写。
## 控制结构
Jinja2提供了多种控制结构,用于根据条件或循环来渲染模板。
### if语句
if语句用于根据条件渲染模板块。例如:
```
{% if user %}
<p>Welcome, {{ user }}!</p>
{% else %}
<p>Please log in.</p>
{% endif %}
```
这里的`user`是一个变量,如果它存在,则显示欢迎消息。否则,显示请登录消息。
### for循环
for循环用于迭代列表或其他可迭代对象,并渲染模板块。例如:
```
<ul>
{% for item in items %}
<li>{{ item }}</li>
{% endfor %}
</ul>
```
这里的`items`是一个列表,`for`循环将迭代它,并为每个项目渲染一个列表项。
### 宏
宏是一种定义可重用代码块的方法。例如:
```
{% macro hello(name) %}
<p>Hello, {{ name }}!</p>
{% endmacro %}
```
这里的`hello`宏定义了一个`name`参数的代码块。它可以在其他模板中使用。
## 继承
Jinja2支持模板继承,允许您创建一个基础模板,并在其上创建子模板。例如:
```
<!-- base.html -->
<html>
<head>
<title>{% block title %}{% endblock %}</title>
</head>
<body>
{% block content %}{% endblock %}
</body>
</html>
<!-- child.html -->
{% extends "base.html" %}
{% block title %}My Page{% endblock %}
{% block content %}
<p>Welcome to my page!</p>
{% endblock %}
```
这里的`child.html`模板扩展了`base.html`模板,并覆盖了`title`块。它还定义了一个`content`块,用于呈现页面内容。
## 自定义过滤器和函数
Jinja2允许您编写自己的过滤器和函数,以扩展其功能。例如:
```
from jinja2 import Environment
def my_filter(value):
return value.upper()
def my_function():
return "Hello, world!"
env = Environment()
env.filters['my_filter'] = my_filter
env.globals['my_function'] = my_function
```
这里的`my_filter`函数将字符串转换为大写。它被注册为一个过滤器,并命名为`my_filter`。`my_function`函数被注册为全局函数,并可以在模板中使用。
这些只是Jinja2的一些基本语法。它还具有许多高级功能,如继承、块、变量范围和模板包含。