django 在views中有数据需要通过字典(dict)的方式传递给template,该字典中又包含了字典,而且字典中的键值还是一个对象,在template中处理传递过来的数据的时候,字典不能通过键值的方式取出原有数据,对象不能通过(.)的方式直接取出数据,通过大量地查阅资料,最终通过过滤器(filter)的方式解决!
在应用中创建templatetags目录,当前示例为”booktest/templatetags“,创建init文件,内容为空
在”booktest/templatetags“目录下创建filters.py文件,代码如下
# coding=utf-8
# 引入模板语言的库类
from django.template import Library
# 创建实例对象
register = Library()
# 将函数注册成过滤器,函数mod就可以在模板中当作过滤器使用
@register.filter
def mod(num):
return num % 2
在templates/booktest/guolvqi.html中,使用自定义过滤器
首先使用load标签引入模块
<ul>
{% load filters %}
{% for book in blist1 %}
{% if forloop.counter|mod %}
<li style="background-color: red;">{{ book.btitle }}</li>
{% else %}
<li style="background-color: blue;">{{ book.btitle }}</li>
{%endif %}
{% endfor %}
</ul>
输出效果为:
当Django内置过滤器满足不了我们的需求时,可以通过自定义过滤器来实现