问题
之前想要在模板里,从字典里取出值然后展示。但是发现没有相关的语法,只有将key 和value同时遍历的方法。于是自定义过滤器进入了视野。
<div class="card-columns" style="margin: 1%">
{% for label in labels %}
<div class="card bg-light">
<p><strong>{{ label }}</strong></p>
<div class="card-body text-center">
{% for record in collections|dic_value:label %}
<a href = '{{ record.title_link }}'><p class="card-text">{{ record.item_title }}</p></a>
{% endfor %}
</div>
</div>
{% endfor %}
</div>
语法:{{ 变量|function:参数 }}
变量有一个,参数最多一个,function就是我们自己定义的python函数。
Django里面自带了一些内置的过滤器:
{{value | add : "2"}} ——> 返回值为 value+2
{{value |upper}} ——> 返回值为value的大写形式
流程
- 在app中建立一个包templatetags(不可变的名字)
-
建立一个‘名字.py’,名字可以随便取。这里假定filter
- 编写这个.py
from django import template
#创建一个库对象
register = template.Library()
# 利用装饰器赋予这个函数过滤器的功能
@register.filter
# 自定义这个函数,其功能就是我们想要的过滤器功能。
def dic_value(dic, key):
return dic[key]
- 在对应的html里最上面加上{% load filter %},这样这个过滤器就可以使用了。
网友评论