自定义步骤:

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模块:

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

  my_filters.html

 {% load my_tags %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="refresh" content="">
<meta name="keywords" content="">
<style></style>
<script src="https://cdn.bootcss.com/jquery/3.4.1/jquery.js"></script>
<link rel="stylesheet" href="">
<title>自定义过滤器</title>
</head>
<body>
<div>
<h1>{{ num|sum_filter:10 }}</h1>
</div>
</body>
</html>

  views.py

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

  渲染结果:

  

自定义标签演示:

app应用中的templatetags包中模块:

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

  my_tags.html

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

  views.py

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

  渲染结果:

  

自定义组件标签演示:

app应用中的templatetags包中模块:

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

  inclusion.html

 <!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>注册标签组件</title>
</head>
<body>
<ul>
{% for i in list %}
<li>{{ i }}</li>
{% endfor %}
</ul>
</body>
</html>

  my_inclusion_tag.html

 {% load my_tags %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义组件标签演示</title>
</head>
<body>
<div>
{% sum_inclusion_tag 10 20 %}
</div>
</body>
</html>

  views.py

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

  渲染结果:

  

  

其他相关(mark_safe) :

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

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

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

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

    一.变量       1.变量的形式是:{{variable}}, 当模板引擎碰到变量的时候,引擎使用变量的值代替变量.    2.使用dot(.)能够访问变量的属性    3.当模板引擎碰到dot的 ...

  2. 12:django 模板 内建过滤器

    django 模板 内建过滤器 add{{ value|add:"2" }} 对象的加法,如果都是整数类型,简单的算术加法:如果是列表,则是列表的相加 如果无法执行对象的相加,比如 ...

  3. Django中的自定义过滤器

    一.为什么要自定义Django中的自定义过滤器:Django中提供了很多内置的过滤器和标签,详见链接django官网,主要有以下几个: autoescape(自动转义)block(模板继承)csrf_ ...

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

    Django(模板语言-自定义filter和simple_tag)   filter过滤器的主要形式:变量|函数,意思是将变量交给函数处理,而自定义filter就是自己定义函数,因为用到已有的很少. ...

  5. Django模板语言,过滤器整理

    Django模板语言,过滤器整理 1. add {{ value|add:"2" }} 把add后的参数加给value: 处理时,过滤器首先会强制把两个值转换成Int类型. 如果强 ...

  6. Django 模板 语法 变量 过滤器 模板继承 组件 自定义标签和过滤器 静态文件相关

    本节目录 一 语法 二 变量 三 过滤器 四 标签Tags 五 模板继承 六 组件 七 自定义标签和过滤器 八 静态文件相关 一 语法   模板渲染的官方文档 关于模板渲染你只需要记两种特殊符号(语法 ...

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

    自定义标签与过滤器 在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 在app中创建templatetags模块(模块名只能是t ...

  8. day51:django:dispatch&模板渲染&过滤器&标签&组件&静态文件配置

    目录 1.dispatch 2.模板渲染 3.过滤器 4.标签 5.组件 6.静态文件配置 dispatch 回顾:CBV对应的URL传参 urls.py url(r'^book/(\d+)/(\d+ ...

  9. django模板的变量,标签,过滤器和自定义过滤器,注释

    模板的作用是计算并输出: {{ 变量}} 当模版引擎遇到点如book.title,会按照下列顺序解析: 1.字典book['title'] 2.先属性后方法,将book当作对象,查找属性title,如 ...

随机推荐

  1. 2019-2020-1 20199325《Linux内核原理与分析》第九周作业

    第九周作业要求: 理解Linux系统中进程调度的时机,可以在内核代码中搜索schedule()函数,看都是哪里调用了schedule(),判断我们课程内容中的总结是否准确: 使用gdb跟踪分析一个sc ...

  2. chcp437 转换英语,在西班牙语系统中无效

    https://social.technet.microsoft.com/Forums/en-US/9c772011-5094-4df0-bf73-7140bf91673b/chcp-command- ...

  3. 终止过久没有返回的 Windows API 函数 ---- “CancelSynchronousIo”

    Marks pending synchronous I/O operations that are issued by the specified thread as canceled. BOOL W ...

  4. python django mysql配置

    1    django默认支持sqlite,mysql, oracle,postgresql数据库.  <1> sqlite django默认使用sqlite的数据库,默认自带sqlite ...

  5. iOS逆向之一 工具的安装和使用

    iOS逆向之一-工具的安装和使用 最近在学习iOS安全方面的技术,有些东西就记录下来了,所有有了这篇文章.顺便也上传了DEMO,可以再这里找到这些DEMO的源码:dhar/iOSReProject 越 ...

  6. P2542 【[AHOI2005]航线规划】

    P2542 [[AHOI2005]航线规划] 一个无向图,m个操作 删去一条边 给定两个点,求有多少边使得如果这条边不存在,给定的两个点不连通 一般这种删边的题目,考虑逆序加边处理 在删完的图中,任意 ...

  7. 70行实现Promise核心源码

    70行实现Promise核心源码 前言: ​ 一直以来都是只会调用Promise的API,而且调API还是调用axios封装好的Promise,太丢人了!!!没有真正的去了解过它的原理是如何实现的,自 ...

  8. spring cloud系列教程第一篇-介绍

    spring cloud系列教程第一篇-介绍 前言: 现在Java招聘中最常见的是会微服务开发,微服务已经在国内火了几年了,而且也成了趋势了.那么,微服务只是指spring boot吗?当然不是了,微 ...

  9. python数据统计分析

    1. 常用函数库   scipy包中的stats模块和statsmodels包是python常用的数据分析工具,scipy.stats以前有一个models子模块,后来被移除了.这个模块被重写并成为了 ...

  10. E. XOR Guessing 交互题 Educational Codeforces Round 71 (Rated for Div. 2)

    E. XOR Guessing 交互题. 因为这个数最多只有14位 0~13,所以我们可以先处理后面7位,然后再处理后面7位. 因为异或的性质,如果一个数和0异或,那么就等于本身. 所以我们第一次异或 ...