2019年3月6日 15:58 by wst
django在往模板填充数据的时候,本来是个从数据库里查出来的列表,每一项在显示的时候,根据不同的下标显示不同的样式。
比如第一个显示红色,第二个显示蓝色,第三个显示黄色。第四个又显示红色,第五个显示蓝色。。。
很容想到的就是对3取余,值为1则为红色;值为2显示蓝色;值为3显示黄色。
奈何模板的过滤器里没有这个用法,尝试过divisibleby,也没解决此问题。
还好可以自定义过滤器。
这里给出核心代码:
1. 自定义过滤器mod.py(顺便给出了自定义标签的用法)
from django import template
register = template.Library() #register的名字是固定的,不可改变
####################以上行是固定不变要写的#############################
######################定义过滤器####################
@register.filter
def filter_mod(v1,v2):
return v1%v2
######################定义标签#####################
@register.simple_tag
def simple_tag_multi(v1,v2):
return v1 * v2
2. 模板文件index.html
<html>
<head>
<title>test</title>
<style>
.class1 {
color: red;
}
.class2 {
color:blue;
}
.class3 {
color:yellow;
}
</style>
</head>
<body>
<h1>模板语法整数取余运算</h1>
{% load mod %}
{% for x in obj %}
{% if forloop.counter|filter_mod:3 == 1 %}
<p class="class1">good{{x}}</p>
{% elif forloop.counter|filter_mod:3 == 2 %}
<p class="class2">good{{x}}</p>
{% else %}
<p class="class3">good{{x}}</p>
{% endif %}
{% endfor %}
</body>
</html>
3. 视图文件views.py
from django.shortcuts import render
def index(request):
return render(request, "index.html", {"obj":[1,2,3,4]})
4. 完整的目录结构如下:
.
├── db.sqlite3
├── divd
│ ├── __init__.py
│ ├── settings.py
│ ├── templates
│ │ └── index.html
│ ├── templatetags
│ │ ├── __init__.py
│ │ └── mod.py
│ ├── urls.py
│ ├── views.py
│ └── wsgi.py
└── manage.py
如果想要完整的可运行的所有代码,请关注下方公众号,并回复“django模板取余”