Django模板的设计初衷是为了展示数据,不适合特别复杂的运算
Django在模板文件中可以使用自带的标签和过滤器来简化模板中的运算,当没有合适的标签或者过滤器时可以进行自定义
一、过滤器与标签的定义
1、在应用目录下方创建模块templatetags (文件夹自动生成__init__.py)
2、在templatetags下方新建 extend_fun.py
3、在extend_fun.py内部实现自定义过滤器(最多支持一个参数)和标签
from django import template
from ..models import Post
# 得到Django负责管理标签和过滤器的类
register= template.Library()
# 注册转换小写的过滤器
@register.filter
def mylower(value):
"""
:param value: 应用过滤器的对象
:return:
"""
return value.lower()
# 注册拼接过滤器
@register.filter
def myjoin(value,sep):
"""
:param value: 应用过滤器的对象
:param sep: 连接符
:return:
"""
return sep.join(value)
# 注册获取最新文章标签
@register.simple_tag
def get_latestarticles(num=3):
"""
:param num: 获取最近数量
:return:
"""
return Article.objects.all().order_by("-create_time")[:num]
二、在模板汇总使用
1、加载自定义标签与过滤器
{% load extend_fun %}
注意初次定义自定义标签或者过滤器需要重启服务器
{% load extend_fun %}
2、过滤器可以直接使用
{{name|mylower}} {{name|myjoin:'-'}}
3、对于标签需要先获取内容
# 使用默认参数
{% get_latestarticles as latestarticles %}
# 传入实参
{% get_latestarticles 5 as latestarticles %}
{% for a in latestarticles %}
{% endfor %}