11.Django(自定制过滤器自定制标签)

Posted muyangxiaodong

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了11.Django(自定制过滤器自定制标签)相关的知识,希望对你有一定的参考价值。

自定制过滤器

1、在项目目录下,创建一个templatetags文件夹(必须这样命名)

技术图片

技术图片

2、在templatetags文件夹下年创建xx.py文件(随意命名,但是要具有描述性)

技术图片

技术图片

3、在xx.py文件中引用tempate模块,并创建注册器

from django import template
?
register = template.Library()   # 创建注册器

4、在xx.py文件中构建一个自定制的过滤器(函数)

@register.filter
?
def ajoin(argv1):   # 过滤器的名字(函数名随便起,但是不能与python自带的顾虑器同名)
  return argv1 + ‘奥力给‘

5、在index.html页面里面引用xx.py文件,使用自定制过滤器

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
?
{% load self_custom %}
{{ name | ajoin }}
{{ hobby | ajoin }}
?
</body>
</html>

 

流程:

浏览器发送请求到url路由分发系统,轮训找到对应的视图函数,执行视图函数;render将html页面进行模板渲染,从上至下依次执行,当执行到{% load self_custom %}的时候,django会将self_custom这个模块加载到内存中,然后继续向下读取,读取到{{ name | ajoin }}取出后端的name对应的数据,自动执行self_custom模块里的自定义过滤器(函数) ajoin并将name实参传入到ajoin这个函数中,最终将此函数的返回值替换到{{ name | ajoin }}这个位置,最终render将整个文件渲染完毕之后,交给views函数的return再有return响应给浏览器。

  • 注意:自定制过滤器至多可以传递两个参数

    @register.filter
    def join_length(argv1, argv2):
    return len(argv1+argv2)

    {% load self_cus %}
    {{ name|join_length:‘微笑的?对它‘ }}

 

自定制标签

1、同自定制过滤器的第1步

2、同自定制过滤器的第2步

3、同自定制过滤器的第3步

4、在xx.py文件构建一个自定制标签

@register.simple_tag
def tags(v1, v2, v3):
  v3.append(v1)
  v3.append(v2)
  return ‘,‘.join(v3)

5、在index.html页面引用自定制标签。

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
?
{% load self_custom %}
{% tags name hobby lis %}
?
</body>
</html>

自定制标签传入的实参没有数量的限制

 

 

总结

无论是自定制过滤器还是自定制标签,都是给你提供了一个接口,让你可以进一步拓展一下业务。这种方式可以让我们写一些常用的公共的功能,提供给我们任何的views视图函数去使用。

不同点:

  • 自定制过滤器至少只能传递2个参数,而自定制标签可以传递任意数量的参数。

  • 自定制过滤器必须要依赖于后端渲染的变量,而自定制标签可以不使用后端渲染的变量。

    {% load self_custom %}
    {% tags ‘今天‘ ‘天气‘ ‘不错‘ %}

以上是关于11.Django(自定制过滤器自定制标签)的主要内容,如果未能解决你的问题,请参考以下文章

13.自定义标签

根据需求定制 admin

Django开发博客系统(07-根据需求定制管理后台)

springboot中怎么自定义thymeleaf标签

UITABBAR IOS 5.0如何定制?

csdn博客左侧栏定制化 (适配最新版csdn主题)