zoukankan      html  css  js  c++  java
  • python测试开发django181.自定义过滤器(除法取余) 上海

    前言

    使用 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 是否是最后一次循环,返回布尔值
  • 相关阅读:
    洛谷 P6295
    洛谷 P4240
    洛谷 P3287
    My rating is 1064.
    洛谷 P5071
    C语言 #include <> 与 #include “” 区别
    C语言 #pragma once
    C语言 typedef 和 define 区别
    C语言 define 定义函数(多行书写)
    C语言 define 定义函数
  • 原文地址:https://www.cnblogs.com/yoyoketang/p/15743606.html
Copyright © 2011-2022 走看看