django 自定义过滤器_自定义权限过滤器

django 自定义过滤器_自定义权限过滤器前言虽然DTL给我们内置了许多好用的过滤器。但是有些时候还是不能满足我们的需求。因此Django给我们提供了一个接口,可以让我们自定义过滤器,实现自己的需求。自定义过滤器首先在某个app中,创建

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

前言

虽然DTL给我们内置了许多好用的过滤器。但是有些时候还是不能满足我们的需求。因此Django给我们提供了一个接口,可以让我们自定义过滤器,实现自己的需求。
 

自定义过滤器

  1. 首先在某个app中,创建一个python包,叫做templatetags,注意,这个包的名字必须为templatetags,不然就找不到。

  2. 在这个templatetags包下面,创建一个python文件用来存储过滤器。

  3. 在新建的python文件中,定义过滤器(也就是函数),这个函数的第一个参数永远是被过滤的那个值,并且如果在使用过滤器的时候传递参数,那么还可以定义另外一个参数。但是过滤器最多只能有2个参数。

  4. 在写完过滤器(函数)后,要使用django.template.Library.filter进行注册。

  5. 还要把这个过滤器所在的这个app添加到settings.INSTALLED_APS中,不然Django也找不到这个过滤器。

  6. 在模板中使用load标签加载过滤器所在的python包。

  7. 可以使用过滤器了。

  8. django.template.Library.filter还可以当作装饰器来使用。如果filter函数没有传递任何参数,那么将会使用这个函数的名字来作为过滤器的名字。当然如果你不想使用函数的名字来作为过滤器的名字,也可以传递一个name参数。示例代码如下:

@register.filter('my_greet')
def greet(value,word):
    return value + word

 

时间过滤器案例

有时候经常会在朋友圈、微博中可以看到一条信息发表的时间,并不是具体的时间,而是距离现在多久。比如刚刚,1分钟前等。这个功能DTL是没有内置这样的过滤器的,因此我们可以自定义一个这样的过滤器。示例代码如下:

# time_filter.py
@register.filter(name="time_since")  # 将函数注册到模版库中当作过滤器
def time_since(value):
    """
       time距离现在的时间间隔
       1. 如果时间间隔小于1分钟以内,那么就显示“刚刚”
       2. 如果是大于1分钟小于1小时,那么就显示“xx分钟前”
       3. 如果是大于1小时小于24小时,那么就显示“xx小时前”
       4. 如果是大于24小时小于30天以内,那么就显示“xx天前”
       5. 否则就是显示具体的时间 2017/10/20 16:15
       """
    if isinstance(value, datetime):
        now = datetime.now()
        timestamp = (now - value).total_seconds()
        if timestamp < 60:
            return "刚刚"
        elif timestamp >= 60 and timestamp < 60 * 60:
            minutes = int(timestamp /60)
            return f"{minutes}分钟前"
        elif timestamp >= 60 * 60 and timestamp < 60 * 60 *24:
            hours = int(timestamp / (60 * 60))
            return f"{hours}小时前"
        elif timestamp >= 60 * 60 * 24 and timestamp < 60 * 60 * 24 * 30:
            days = int(timestamp / (60 * 60 * 24))
            return f"{days}天前"
        else:
            return value.strftime("%Y/%m/%d %H:%M")
    else:
        return value

在模版中使用的示例代码如下:

{% load time_filter %}  <!--加载自定义过滤器,time_filter是创建的python文件的名字-->
...
{% value|time_since %}  <!--使用自定义过滤器-->
...
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/165446.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 三次B样条曲线拟合算法

    三次B样条曲线拟合算法三次B样条曲线方程B样条曲线分为近似拟合和插值拟合,所谓近似拟合就是不过特征点,而插值拟合就是通过特征点,但是插值拟合需要经过反算得到控制点再拟合出过特征点的B样条曲线方程。这里会一次介绍两种拟合算法。首先介绍B样条的曲线方程。B样条曲线的总方程为:P(t)=∑ni=0PiFi,k(t)P(t)=\sum_{i=0}^{n}P_{i}F_{i,k}(t)(1)其中PiP_i是控制曲

    2022年6月18日
    27
  • c语言里的pow函数「建议收藏」

    头文件:#include&lt;math.h&gt;pow()函数用来求x的y次幂(次方),x、y及函数值都是double型,其原型为:  doublepow(doublex,doubley);pow()用来计算以x为底的y次方值,然后将结果返回。设返回值为ret,则 ret=xy。可能导致错误的情况:如果底数x为负数并且指数y不是整数,将会导致do…

    2022年4月5日
    95
  • Hints用法大全

    Hints用法大全在 SQL 语句优化过程中 我们经常会用到 hint 现总结一下在 SQL 优化过程中常见 OracleHINT 的用法 1 ALL ROWS 表明对语句块选择基于开销的优化方法 并获得最佳吞吐量 使资源消耗最小化 例如 SELECT ALL ROWS EMP NO EMP NAM DAT INFROMBSEMPM NO SCOTT 2 F

    2025年9月17日
    3
  • drupal 6.0 入门教程 – 第一章

    drupal 6.0 入门教程 – 第一章
     
    由于工作项目的原因,需要采用drupal来部署,所以最近学习了drupalcms,天天到 drupal.org,drupalchina.org,zhupou.cn,5iphp.com上学习
     
     
    项目的核心是提供一款在线教学和互动社区,希望通过这个教程提供给大家一个比较全面的项目开发指导。首先,我近期的主要任务是熟悉drupalCMS,和设计主页的版式也就是themes。
     
    下面我们从drupal的介绍入手,开始讲解如果

    2022年5月29日
    35
  • Android学习(简单使用Bottom Navigation Activity来实现底部导航栏)

    Android学习(简单使用Bottom Navigation Activity来实现底部导航栏)在我们实际编写程序时,不必每一个activity都要从零开始,利用好系统自带的模板往往可以起到事半功倍的效果。下面我们就来看看如何使用BottomNavigationActivity来完成简单的底部导航栏功能。先来看一下效果图吧:创建activity首先在创建面板,我们选择然后next,finish就OK了。创建成功以后我们来运行一下,发现已经基本实现了底部导航栏的功能了!但是还没有结…

    2025年6月16日
    2
  • 2021年超全中高级Java工程师面试题+答案「建议收藏」

    2021年超全中高级Java工程师面试题+答案「建议收藏」java缓存技术面试题1、memcache的分布式原理  memcached虽然称为“分布式”缓存服务器,但服务器端并没有“分布式”功能。每个服务器都是完全独立和隔离的服务。memcached的分布式,则是完全由客户端程序库实现的。这种分布式是memcached的最大特点。  2、memcache的内存分配机制  如何存放数据到memcached缓存中?(memcache内存分配机制)  SlabAllocator内存分配机制:预先将内存分配成数个slab仓库,

    2022年5月5日
    48

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号