Django 模板之自定义函数

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

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

simple_tag:

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

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

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

__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

INSTALLED_APPS = [
    ‘django.contrib.admin‘,
    ‘django.contrib.auth‘,
    ‘django.contrib.contenttypes‘,
    ‘django.contrib.sessions‘,
    ‘django.contrib.messages‘,
    ‘django.contrib.staticfiles‘,
    ‘app01‘,
]

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

例如

{% load calculation %}
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title></title>
</head>
<body>

    <p>
        {% addnum  2  5  6 %}
    </p>
  
</body>
</html>

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

首先看几个自带的例子

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

    <p>
         {{ name }}
    </p>
    <p>
        {{ name|upper }}
    </p>
    <p>
        {{ name|truncatechars:"10" }}
    </p>

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

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

比如

__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"}}

{% 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>

结果如下

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

  • simple_tag可以使用任何个数的参数,而filter只能最多2个参数
  • simple_tag不能作为if条件,而filter可以
  • simple_tag后面的参数直接的空格随意, filter不能有空格
时间: 2024-08-27 00:02:12

Django 模板之自定义函数的相关文章

四、smarty模板的自定义函数

smarty模板的自定义函数(这里介绍的是常用) 分为三个种类: 1.  变量调节器 2.  函数 3.  块函数 三个种类插件的用法: 1.  变量调解器的用法, <{$var|myfun:arg1:arg2}> 2.  函数的用法(和使用HTML标记很像) 如, <{myfun color=”red” size=”7” num=”7”}> 在PHP中定义的函数为: $smarty->registerPlugin(“function”,”myfun”,”one”); fun

模板语言 自定义函数simple_tag

模板语言自带的一些处理函数:通过管道符来处理 帮助方法:{{ item.event_start|date:"Y-m-d H:i:s"}}  转换成日期时间型{{ bio|truncatewords:"30" }} 只取前30个字符{{ my_list|first|upper }} 将第一个字母大写{{ name|lower }} 全转换小写 有时我们须要自定义函数: a.在app中创建templatetags模块 b.创建任意 .py 文件,如:xx.py 1 2

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

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的名

在ecshop模板使用自定义函数

可以增加自定义函数,在模板直接调用,例如: {$userId|get_user_name} 或 {$imgUrl|set_width_height:100:200} 案例一(处理图片): 1.模板里使用{$imgurl|getpic:100:200} 2.includes/lib_base.php里面增加函数 function getpic($str, $width, $height){ $len= stripos($str, '.'); if($len !== false){ $str= su

[oldboy-django][2深入django]django模板使用函数

1 模板引入子html--include 7 模板引擎 - 母版 - include,导入公共的html a. 用法:{% include "pub.html" %}, pub.html还可以添加 {{ name }} b. 一个页面可以导入多次,一个html只能有一个母版 c.样例 # public.html <div class="public"> <div class="content"> {{ userinfo }

Django——模板层(template)(模板语法、自定义模板过滤器及标签、模板继承)

阅读目录(Content) 模板语法之变量 模板之过滤器 default length filesizeformat date slice truncatechars safe 模板之标签 自定义标签和过滤器 模板继承 (extend) 模板语法之include 前言:当我们想在页面上给客户端返回一个当前时间,一些初学者可能会很自然的想到用占位符,字符串拼接来达到我们想要的效果,但是这样做会有一个问题,HTML被直接硬编码在 Python代码之中. 1 2 3 4 def current_dat

django之模版的自定义函数

- 自定义函数 simple_tag a. app下创建templatetags目录 b. 任意xxoo.py文件 c. 创建template对象 register d. __author__ = 'Administrator'from django import templatefrom django.utils.safestring import mark_safe register = template.Library()@register.simple_tag def func(a1,a

Golang通过自定义函数实现模板的包含

Golang通过自定义函数实现模板的包含 Golang原生不支持例如revel中指令{{ template "header.html" }} ? 1 package main import ( ? 1 2 3 4 "html/template" "log" "os" "io/ioutil" ) func main() { ? 1 2 3 s := ParseTmplateToStr("src/1.