python测试开发django-181.自定义过滤器(除法取余)

前言

使用 django 模板jinja2 写 html, 需对变量的取值做加减乘除运行,得到的结果再去判断是否为真。
这种比较复杂的逻辑运行,可以通过自定义过滤器来实现。

遇到问题

视图函数返回的数据

context = {"titles": ["宇宙知识",
                      "百科知识",
                      "科学世界",
                      "生物世界",
                      "海洋世界",
                      "唯美地球",
                      "恐龙世界"]}

模板里面遍历取值

<h3>分类标题</h3>
{% for title in titles %}
    {{ title }} |
{% endfor %}

得到的结果

我们期望每3个title显示一行,多余的换行显示。

过滤器filter

在app下新建templatetags目录,

写一个过滤器myfilter.py

from django import template

register = template.Library()


@register.filter(name='quyu')
def myquyu(value, arg):
    """除法取余,得到余数"""
    return int(value) % int(arg)

在模板中引用过滤器,必须先加载{% load myfilter %}

<h3>分类标题</h3>
{% for title in titles %}

    {% if forloop.counter|quyu:3 == 0 %}
        {{ title }} <br>
    {% else %}
        {{ title }} |
    {% endif %}
{% endfor %}

显示效果

再加个判断,最后一个不显示 |

{%  load myfilter %}
<h3>分类标题</h3>
{% for title in titles %}

    {% if forloop.counter|quyu:3 == 0 %}
        {{ title }} <br>
    {% elif forloop.last %}
        {{ title }}
    {% else %}
        {{ title }} |
    {% endif %}
{% endfor %}

显示效果

关于forloop变量的使用

  • forloop 是for循环的内容变量
  • forloop.counter 是得到当前是第几次循环,从1开始
  • forloop.counter0 是得到当前是第几次循环,从0开始
  • forloop.first 是否是第一次循环,返回布尔值
  • forloop.last 是否是最后一次循环,返回布尔值
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值