在Django项目里,如果自带的模板过滤器无法满足业务需求,我们可以通过Python编写自定义标签和过滤器来扩展模板引擎的功能。这种方式能把数据处理逻辑放在后端,保持模板简洁易读。

创建templatetags模块
首先要在使用的应用目录下新建一个名为templatetags的包,并在其中添加__init__.py文件和一个自定义模块文件,例如my_tags.py。
# myapp/templatetags/my_tags.py
from django import template
register = template.Library()
# 自定义过滤器:将文本转为大写
@register.filter(name='upper_text')
def upper_text(value):
return str(value).upper()
# 自定义简单标签:计算两数之和
@register.simple_tag(name='add_numbers')
def add_numbers(a, b):
return a + b
在模板中加载并使用
在HTML模板顶部使用{% load my_tags %}加载模块后,即可调用自定义的过滤器和标签。
<!-- 模板文件 example.html -->
{% load my_tags %}
<p>大写结果:{{ name|upper_text }}</p>
<p>求和结果:{% add_numbers 3 5 %}</p>
包含标签与过滤器区别
除了simple_tag,还可以用inclusion_tag渲染子模板。过滤器主要处理单个变量,而标签适合多参数或复杂逻辑。下面用表格说明常见差异:
| 类型 | 调用形式 | 适用场景 |
|---|---|---|
| 过滤器 | {{ var|filter_name }} | 变量格式转换 |
| 简单标签 | {% tag_name arg1 arg2 %} | 多参数计算 |
注意事项
- templatetags包必须位于已安装的应用中
- 修改代码后需重启开发服务器才能生效
- 过滤器函数建议处理空值避免模板报错
通过上述方式,利用Python扩展Django模板功能既直观又易于维护,能有效提升项目开发效率。