自定义步骤:

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 20199310《Linux内核原理与分析》第十一周作业

    1.问题描述 在一个capability系统中,当一个程序运行时,对应的线程会初始化一系列capabilities(令牌).当线程尝试访问某个对象时,操作系统会检查该线程的capabilities,并 ...

  2. java基础问题 (待解决)

    (1)接口与抽象类的区别? (2)Java中的异常有哪几类?分别怎么使用? (3)常用的集合类有哪些?比如List如何排序? (4)ArrayList和LinkedList内部的实现大致是怎样的?他们 ...

  3. 深入研究Clang(十) Clang Static Analyzer简介

    Clang Static Analyzer 官网地址:http://clang-analyzer.llvm.org/ Clang Static Analyer是一个源码分析工具,它可以发现C.C++和 ...

  4. k8s namespace限制调研

    1.创建namespace gpu 2.增加限制 [root@tensorflow1 gpu-namespace]# cat compute-resources.yaml apiVersion: v1 ...

  5. 《Exchange Server 2010 SP1/SP2管理实践》——第2章 搭建Exchange实验环境2.1 网络环境规划...

    本节书摘来自异步社区<Exchange Server 2010 SP1/SP2管理实践>一书中的第2章,第2.1节,作者: 王淑江 更多章节内容可以访问云栖社区"异步社区&quo ...

  6. 翻转单词顺序 VS 左旋转字符串

    全部内容来自<剑指offer>. 题目一: 输入一个英文句子,翻转句子中单词的顺序,但单词内字符的顺序不变.为简单起见,标点符号和普通字符一样处理.例如输入字符串“I am a stude ...

  7. ES[7.6.x]学习笔记(六)分析器

    在前面的章节中,我们给大家介绍了索引中的映射类型,也就是每一个字段都有一个类型,比如:long,text,date等.这和我们的数据库非常的相似,那么它的不同之处是什么呢?对了,就是全文索引,在ES当 ...

  8. 创造DotNet Core轻量级框架【一】

    前言 net core 已经出了很久了,网上的各种框架也很多了,但是没看到一个很小很轻的框架,基本都是那种啥功能都有,但是我需要的功能只占他们框架的百分之几,很少很少,所以自己创造一个框架. 因为之前 ...

  9. 学习vue第七节,filter过滤器如何的使用

    vue 过滤器如何的使用 <!DOCTYPE html> <html> <head> <meta charset="utf-8"> ...

  10. webpack----js的静态模块打包器

    webpack----js的静态模块打包器 博客说明 文章所涉及的资料来自互联网整理和个人总结,意在于个人学习和经验汇总,如有什么地方侵权,请联系本人删除,谢谢! 简介 webpack 是一个现代 J ...