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() # 创建注册器
@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(自定制过滤器自定制标签)的主要内容,如果未能解决你的问题,请参考以下文章