Django模板之自定义过滤器/标签/组件

自定义步骤:

1.     在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag.

2.     在app应用中创建templatetags模块包(模块名只能是templatetags)

3.     创建任意 .py 文件,如:my_tags.py

·   导入模块:from django import template

·   实例化注册器:register = template.Library()   #register的名字是固定的,不可改变

4.     在自定义模块(my_tags.py)中定义不同的函数,使用不同注册类进行装饰

·   注册过滤器:@register.filter

自定义过滤器函数的参数最多不能超过两个,第一个参数默认为渲染的变量

·         注册标签:@register.simple_tag

自定义标签函数的参数个数不限

·         注册组件:@register.inclusion_tag("渲染模板.html")

自定义组件标签函数的返回值作为注册器渲染的数据,然后将渲染后的模板返回给调用页面(类似组件)

     5.     在使用自定义过滤器、标签、标签组件时,必须现在html文档首行导入自定义的模块:{% load my_tags %}   

         

自定义过滤器演示:

app应用中的templatetags包中my_tags.py模块:

 1 from django import template
 2 register=template.Library()     #register变量名是固定不变的
 3
 4 @register.filter
 5 def sum_filter(a,b):    #参数最多不超过两个,第一个默认为模板变量
 6     ‘‘‘
 7     模板变量过滤器,返回值作为渲染结果
 8     :param a: 模板变量
 9     :param b: 给定参数
10     :return: 渲染显示数据
11     ‘‘‘
12     return a+b 

  my_filters.html

 1 {% load my_tags %}
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <meta http-equiv="refresh" content="">
 7     <meta name="keywords" content="">
 8     <style></style>
 9     <script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
10     <link rel="stylesheet" href="">
11     <title>自定义过滤器</title>
12 </head>
13 <body>
14     <div>
15         <h1>{{ num|sum_filter:10 }}</h1>
16     </div>
17 </body>
18 </html>

  views.py

1 def my_filters(request):
2     n=10
3     return render(request,"my_filters.html",{"num":n})

  渲染结果:

  

自定义标签演示:

app应用中的templatetags包中模块:

1 from django import template
2 register=template.Library()     #register变量名是固定不变的
3
4 @register.simple_tag
5 def sum_simple_tag(a,b,c):         #自定义标签参数不限
6     return a+b+c

  my_tags.html

 1 {% load my_tags %}
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>自定义标签演示</title>
 7 </head>
 8 <body>
 9     <div><h1>{{ num }} </h1></div>
10     <div><h1>{% sum_simple_tag 2 4 5 %}</h1></div>
11     <div><h1>{% sum_simple_tag num 4 5 %}</h1></div>
12 </body>
13 </html>

  views.py

1 def my_tag(request):
2     n=10
3     return render(request,"my_tags.html",{"num":n})

  渲染结果:

  

自定义组件标签演示:

app应用中的templatetags包中模块:

 1 from django import template
 2 register=template.Library()     #register变量名是固定不变的
 3
 4 @register.inclusion_tag("inclusion.html")#组件注册标签类必须参入一个组件模板的html文件接收函数返回值进行渲染
 5 def sum_inclusion_tag(m,n):
 6     ‘‘‘
 7     自定义组件标签,函数返回值给注册类模板参数渲染,渲染之后的html文件当成组件自动在标签调用页面渲染显示
 8     :param m: 给定的组件标签参数
 9     :param n:给定的组件标签参数
10     :return: 自定形式的值当场注册类参数模板的模板变量进行渲染
11     ‘‘‘
12     li=[]
13     for i in range(m,n):
14         li.append(i)
15     return {"list":li}

  inclusion.html

 1 <!DOCTYPE html>
 2 <html lang="en">
 3 <head>
 4     <meta charset="UTF-8">
 5     <title>注册标签组件</title>
 6 </head>
 7 <body>
 8     <ul>
 9         {% for i in list %}
10             <li>{{ i }}</li>
11         {% endfor %}
12     </ul>
13 </body>
14 </html>

  my_inclusion_tag.html

 1 {% load my_tags %}
 2 <!DOCTYPE html>
 3 <html lang="en">
 4 <head>
 5     <meta charset="UTF-8">
 6     <title>自定义组件标签演示</title>
 7 </head>
 8 <body>
 9     <div>
10         {% sum_inclusion_tag 10 20 %}
11     </div>
12 </body>
13 </html>

  views.py

def my_inclusion_tag(request):
    return render(request,"my_inclusion_tag.html")

  渲染结果:

  

  

其他相关(mark_safe) :

#mark_safe渲染的数据可以被识别成html标签内容

1 from django import template
2 from django.utils.safestring import mark_safe
3
4 register = template.Library()   #register的名字是固定的,不可改变
5
6 @register.simple_tag
7 def my_input(id,arg):
8     result = "<input type=‘text‘ id=‘%s‘ class=‘%s‘ />" %(id,arg,)
9     return mark_safe(result)

原文地址:https://www.cnblogs.com/open-yang/p/11221793.html

时间: 2024-08-01 21:48:06

Django模板之自定义过滤器/标签/组件的相关文章

Django 模板中 变量 过滤器 标签 的使用方法

一.变量 1.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量.    2.使用dot(.)能够访问变量的属性    3.当模板引擎碰到dot的时候,查找的顺序是什么样子呢?        a.字典查找,例如:foo["var1"]        b.属性查找,例如:foo.bar        c.方法查找,例如:foo.bar()        d.list-index查找,例如foo[bar] 注意:方法查找比一般的查找要复杂一些 (1

Django之模板层-自定义过滤器以及标签

自定义标签与过滤器 在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 在app中创建templatetags模块(模块名只能是templatetags) 创建任意 .py 文件,如:my_tags.py from django import template # 该对象名必须是register register = template.Library() #自定义过滤器装饰器 @register.filter def mult

Django(模板语言-自定义filter和simple_tag)

filter过滤器的主要形式:变量|函数,意思是将变量交给函数处理,而自定义filter就是自己定义函数,因为用到已有的很少. 1.在当前app中创建templatetags模块(包:带__init__.py)(必须的) 2.在templatetags中创建.py文件,如my_tags.py from django import template #因为要应用到前端模板语言,必须导入template from django.utils.safestring import mark_safe re

Vue2.0笔记——{{}}模板与自定义过滤器

模板语法 让我们回到最开始 <div id="app"> <h1>{{message}}</h1> </div> <script> var vm = new Vue({ el:'#app', data:{ message:'HelloWorld' } }) </script> 这是一个HelloWorld,简单的通过模板输出.我们称之为数据绑定,而最常见的就是"Mustache"语法 (双大括号

Django 模板中使用if标签进行数据比较问题

最近发现之前写一个程序存在一个问题,和大家分享下: 需求: 将视图中的数据根据如下条件在网页上显示不同的颜色: [30,60] 蓝色 [0,30) 红色 (60,100] 绿色 之前的程序片段: {% if x.y.5day_ago|floatformat:2 > 60|floatformat:2 %}  <td style="color :green"><strong> {{x.y.5day_ago}}%</strong></td>

Django模板中include的标签的使用

在很多网站中,基本上的都会有一个开头和一个结尾,在每一个网页中都会显示.相对于这种的来说,在Django中,最好的方法就是使用include的标签,在每一个模板中都加入这个开头和结尾的标签. 官方文档:链接 1.可以直接使用模板的名字进行导入,例如 {% include "index.html"%} 2.可以使用模板的路径进行导入,例如,要导入templates目录的子目录aaa中的html文件,如图: 使用{% include "aaa/include.html"

Django 模板之自定义函数

我们已经知道了在Django的模板里面,可以使用for循环,if判断,接收后台的数据,还可以通过 extends和include来重复使用其他的模板,这一节来学习如何自定义函数. 模板里面有两种方式来自定义函数,分别是simple_tag和 filter方式. simple_tag: 1 首先在app下创建一个templatetags的目录,然后在这个目录下面创建一个py文件,注意这个目录的名字是固定的 2.  然后在这个py文件里面,导入模板类,实例化一个对象register,然后执行一个装饰

django 模板 内建过滤器

add{{ value|add:"2" }} 对象的加法,如果都是整数类型,简单的算术加法:如果是列表,则是列表的相加 如果无法执行对象的相加,比如整数和字符串,则返回一个空串 addslashes{{value | addslashes}} 在引号前面添加斜线,主要应用与字符转义 capfirst{{value| capfirst}} 首字符大写 center{{value|center:"15"}} 在给定的宽度里面居中 cut{{value|cut:"

Django模板语言-(母板、组件、静态文件相关、simple_tag、inclusion_tag)

母板 母版的写法 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="x-ua-compatible" content="IE=edge"> <meta name="viewport" content="width=devi