【进阶】Django模板引擎:创建动态网页
发布时间: 2024-06-25 15:39:55 阅读量: 71 订阅数: 99
![pythonWeb开发合集](https://oscimg.oschina.net/oscnet/f640e364a813eb6a3f78f6b8a956dfdf4d0.jpg)
# 2.1 模板变量和表达式
### 2.1.1 变量的获取和使用
Django 模板系统提供了强大的变量获取机制,允许模板访问视图函数中传递的数据。变量可以通过双大括号 `{{ }}` 访问,例如:
```
{{ my_variable }}
```
其中 `my_variable` 是视图函数中传递的变量名。变量可以是任何 Python 对象,包括字符串、数字、列表、字典等。
### 2.1.2 表达式的语法和运算符
模板表达式允许在模板中执行简单的数学运算和逻辑操作。表达式可以使用以下运算符:
| 运算符 | 描述 |
|---|---|
| + | 加法 |
| - | 减法 |
| * | 乘法 |
| / | 除法 |
| % | 取模 |
| == | 等于 |
| != | 不等于 |
| < | 小于 |
| > | 大于 |
| <= | 小于等于 |
| >= | 大于等于 |
例如,以下表达式计算两个变量的和:
```
{{ my_variable1 + my_variable2 }}
```
# 2. Django模板语法基础
### 2.1 模板变量和表达式
#### 2.1.1 变量的获取和使用
Django模板中使用双大括号 `{{ }}` 访问变量。变量可以是上下文中的任何对象,例如模型实例、列表或字典。
```python
# views.py
def my_view(request):
context = {
'name': 'John Doe',
'age': 30,
}
return render(request, 'my_template.html', context)
```
```html
<!-- my_template.html -->
<h1>{{ name }}</h1>
<p>Age: {{ age }}</p>
```
输出:
```
<h1>John Doe</h1>
<p>Age: 30</p>
```
#### 2.1.2 表达式的语法和运算符
Django模板还支持表达式,允许在模板中执行简单的计算和操作。表达式使用 `{% %}` 括起来。
**语法:**
```
{% expression %}
```
**运算符:**
* 算术运算符:`+`, `-`, `*`, `/`, `%`
* 比较运算符:`==`, `!=`, `<`, `>`, `<=`, `>=`
* 逻辑运算符:`and`, `or`, `not`
**示例:**
```html
<!-- my_template.html -->
{% if age > 18 %}
<h1>{{ name }} is an adult.</h1>
{% else %}
<h1>{{ name }} is a child.</h1>
{% endif %}
```
输出:
```
<h1>John Doe is an adult.</h1>
```
### 2.2 模板标签和过滤器
#### 2.2.1 常用的模板标签
Django提供了一系列模板标签,用于控制模板的流程和生成内容。
| 标签 | 描述 |
|---|---|
| `{% if %}` | 条件语句 |
| `{% for %}` | 循环语句 |
| `{% include %}` | 包含其他模板 |
| `{% extends %}` | 模板继承 |
| `{% block %}` | 模板重写 |
**示例:**
```html
<!-- my_template.html -->
{% if user.is_authenticated %}
<h1>Welcome, {{ user.username }}!</h1>
{% else %}
<h1>Please log in.</h1>
{% endif %}
```
#### 2.2.2 内置过滤器和自定义过滤器
过滤器用于对变量进行转换或操作。Django提供了许多内置过滤器,例如:
| 过滤器 | 描述 |
|---|---|
| `lower` | 将字符串转换为小写 |
| `upper` | 将字符串转换为大写 |
| `truncatechars` | 截断字符串到指定长度 |
| `date` | 将日期对象格式化为字符串 |
**示例:**
```html
<!-- my_template.html -->
<h1>{{ user.username|lower }}</h1>
```
输出:
```
<h1>johndoe</h1>
```
**自定义过滤器:**
还可以创建自定义过滤器以扩展模板功能。
```python
# filters.py
from django import template
register = template.Library()
@register.filter
def my_custom_filter(value):
return value.replace(' ', '_')
```
```html
<!-- my_template.html -->
```
0
0