Django 模板之自定义函数

简介:

我们已经知道了在Django的模板里面,可以使用for循环,if判断,接收后台的数据,还可以通过 extends和include来重复使用其他的模板,这一节来学习如何自定义函数。


模板里面有两种方式来自定义函数,分别是simple_tag和 filter方式。


simple_tag:

1 首先在app下创建一个templatetags的目录,然后在这个目录下面创建一个py文件,注意这个目录的名字是固定的


wKioL1mNCMjw8Gj7AABEM0uTCU0333.jpg


2.  然后在这个py文件里面,导入模板类,实例化一个对象register,然后执行一个装饰器simple_tag, 装饰器下面是自己的函数


请注意,除了自己写的函数,其余所有这些参数的名字都是固定的!

1
2
3
4
5
6
7
__author__  =  'Administrator'
from  django  import  template
from  django.utils.safestring  import  mark_safe
register  =  template.Library()
@register .simple_tag
def  addnum(a1,a2,a3):
     return  a1 + a2 + a3


3. 和数据库的操作一样,需要在settings.py里面注册这个app

1
2
3
4
5
6
7
8
9
INSTALLED_APPS  =  [
     'django.contrib.admin' ,
     'django.contrib.auth' ,
     'django.contrib.contenttypes' ,
     'django.contrib.sessions' ,
     'django.contrib.messages' ,
     'django.contrib.staticfiles' ,
     'app01' ,
]


4. 在要使用的模板文件里面顶部导入我们写的python文件, 就可以调用了。调用的时候空格距离无所谓

例如

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
{% load calculation %}
<!DOCTYPE html>
< html  lang = "en" >
< head >
     < meta  charset = "UTF-8" >
     < title ></ title >
</ head >
< body >
 
     < p >
         {% addnum  2  5  6 %}
     </ p >
   
</ body >
</ html >

wKioL1mNCxzR9LPOAABCWFtxGpw983.jpg


第二种定义函数的方式叫做filter,这个和Django自带的函数使用方式非常类似。

首先看几个自带的例子


比如我可以直接传入一个字符串,然后通过管道符号,后面跟一个字符串的函数让他改变大小写或者切片

1
2
3
4
5
6
7
8
9
     < p >
          {{ name }}
     </ p >
     < p >
         {{ name|upper }}
     </ p >
     < p >
         {{ name|truncatechars:"10" }}
     </ p >


如果希望使用类似的格式来调用自己的函数,我们可以使用filter


filter的步骤和simple_tag非常类似。 首先仍然是创建 templatetags目录,然后创建一个py文件,然后实例化一个register对象。区别在于装饰器不同了,这次是@register.filter


比如

1
2
3
4
5
6
7
8
9
10
__author__  =  'Administrator'
from  django  import  template
from  django.utils.safestring  import  mark_safe
register  =  template.Library()
@register .simple_tag
def  addnum(a1,a2,a3):
     return  a1 + a2 + a3
@register . filter
def  mulnum(a1,a2):
     return  a1 * a2


接下来步骤一样,需要在settings.py里面注册app,然后模板文件load这个py文件,调用的时候不是{% 函数名 参数1 参数2 参数3%} 的格式 而是 {{ 参数1 | 函数名:"参数2"}}

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
{ %  load calculation  % }
<!DOCTYPE html>
<html lang = "en" >
<head>
     <meta charset = "UTF-8" >
     <title>< / title>
< / head>
<body>
     <p>
         { %  addnum   2   5   6  % }
     < / p>
     <p>
          {{ name }}
     < / p>
     <p>
         {{ name|upper }}
     < / p>
     <p>
         {{ name|truncatechars: "10"  }}
     < / p>
     {{  30 |mulnum: 30  }}
< / body>
< / html>


结果如下


wKioL1mNDYCBbEDwAABZ522dGX0231.jpg


那么,除了格式的区别,simple_tag和filter还有什么区别呢? 


  • simple_tag可以使用任何个数的参数,而filter只能最多2个参数

  • simple_tag不能作为if条件,而filter可以

  • simple_tag后面的参数直接的空格随意, filter不能有空格






本文转自 beanxyz 51CTO博客,原文链接:http://blog.51cto.com/beanxyz/1955340,如需转载请自行联系原作者

目录
相关文章
|
6月前
|
SQL 前端开发 JavaScript
Python 教程之 Django(10)模板
Python 教程之 Django(10)模板
65 0
|
2月前
|
Java C++ Python
django 模板 过滤器
django 模板 过滤器
|
3月前
|
前端开发 JavaScript 数据库
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
python Django教程 之模板渲染、循环、条件判断、常用的标签、过滤器
|
3月前
|
JSON 数据处理 API
Django后端架构开发:视图与模板的正确使用
Django后端架构开发:视图与模板的正确使用
33 1
|
3月前
|
前端开发 Python
Django模板
【8月更文挑战第19天】
31 3
|
3月前
|
自然语言处理 前端开发 数据处理
Django的模板系统
【8月更文挑战第13天】
30 2
|
3月前
|
API Java 数据库连接
从平凡到卓越:Hibernate Criteria API 让你的数据库查询瞬间高大上,彻底告别复杂SQL!
【8月更文挑战第31天】构建复杂查询是数据库应用开发中的常见需求。Hibernate 的 Criteria API 以其强大和灵活的特点,允许开发者以面向对象的方式构建查询逻辑,同时具备 SQL 的表达力。本文将介绍 Criteria API 的基本用法并通过示例展示其实际应用。此 API 通过 API 构建查询条件而非直接编写查询语句,提高了代码的可读性和安全性。无论是简单的条件过滤还是复杂的分页和连接查询,Criteria API 均能胜任,有助于提升开发效率和应用的健壮性。
123 0
|
3月前
|
前端开发 数据处理 开发者
解锁Django模板系统终极奥义!揭秘高效前端渲染秘籍,让你的网站秒变炫酷黑科技!
【8月更文挑战第31天】Django作为Python的高级Web框架,内置的模板系统支持动态HTML渲染。本文通过在线书店案例,详细介绍Django模板系统的设置与高效渲染技巧,包括创建模板文件、编写视图函数及URL配置。通过合理使用过滤器、深度查询和模板继承等技巧,提升前端渲染效率和安全性,优化Web应用开发流程。
26 0
|
3月前
|
安全 JavaScript 前端开发
Django入门到放弃之模板及标签
Django入门到放弃之模板及标签
|
5月前
|
缓存 运维 Serverless
Serverless 应用引擎产品使用合集之基于django应用模板创建的FC,如何配置数据库
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
下一篇
无影云桌面