自定义标签或者过滤器的步骤

①将要创建自定义标签或过滤器的app加入settings文件的installed_apps中

②在app中创建templatetags目录,类型为包即packages

③在templatetags目录下创建py文件,在文件中创建标签或过滤器

④在模板中的第一行通过{% load py文件名 %}导入创建标签或过滤器的py文件

⑤在模板中使用自定义标签或过滤器

示例:在templatetags目录下创建名为myTags的py文件

from django import template
from django.utils.safestring import mark_safe
register=template.Library() #前面三行为必须的

@register.simple_tag  #通过@register.simple_tag装饰成标签
def tag_multi(x,y,z):  #返回参数相乘的结果
    return x*y*z

@register.filter  #通过@register.filter装饰成过滤器
def filter_multi(x,y):   #返回参数相乘的结果,装饰器只能接收两个参数
    return x*y

在模板中

{% load myTags %}  <!--在模板中第一行通过load引用创建标签和过滤器的py文件-->
……
<body>
<p> {% tag_multi 2 3 6 %} </p>
<p> {% tag_multi 2 3 'hi' %} </p>  <!--以上两条使用自定义标签-->
<p> {{ 5|filter_multi:8 }} </p>
<p> {{ 'hello'|filter_multi:3 }} </p>   <!--以上两条使用自定义过滤器-->
……
</body>
</html>

浏览器结果显示

需要注意的是

①通过@register.simple_tag和@register.filter区分是自定义标签还是自定义过滤器

②自定义标签可以接受多个参数;而自定义过滤器只能接收两个参数,并且第一个参数为使用时管道符|前面的变量

③自定义标签不能在控制语句if中使用,而自定义过滤器可以

其他可能会用到的标签

{% csrf_token %}:第一次使用post方式提交表单时,需要在表单中添加该标签,才不会被django的csrf中间件阻止

如果视图中的变量名称较长,可在模板中通过with标签对原变量取别名,方便后续在模板中使用,假如视图函数中有一个变量名为abcdefghijklmnopq,可通过以下两种方式进行,通过这两种方式,在with和endwith之间可通过别名使用原来的变量

{% with  abcdefghijklmnopq as var %}      {% endwith %}

{% with  var = abcdefghijklmnopq  %}       {% endwith %}

需要显示内容并使用双大括号括起来,而不希望双大括号之间的内容被渲染成变量,可通过verbatim标签实现,例如上述例子中就是要显示{{age}}而不是显示变量age代表的数值

{% verbatim %}    {{ age }}     {% endverbatim %}

django模板-自定义标签、过滤器的更多相关文章

  1. Django之自定义标签,过滤器,以及inclusion_tag

    目录 Django之自定义标签,过滤器,以及inclusion_tag 自定义过滤器 自定义标签 inclusion_tag inclusion_tag() 项目实例: inclusion_tag() ...

  2. Django模板自定义标签和过滤器,模板继承(extend),Django的模型层

    上回精彩回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...

  3. python 全栈开发,Day70(模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介)

    昨日内容回顾 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 Quer ...

  4. Django基础(2)--模板自定义标签和过滤器,模板继承 (extend),Django的模型层-ORM简介

    没整理完 昨日回顾: 视图函数: request对象 request.path 请求路径 request.GET GET请求数据 QueryDict {} request.POST POST请求数据 ...

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

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

  6. Django模板语言 标签整理

    Django模板语言 标签 内置标签引用 1. autoescape 控制自动转义是否可用. 这种标签带有任何 on 或 off 作为参数的话,他将决定转义块内效果. 该标签会以一个endautoes ...

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

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

  8. (转) ThinkPHP模板自定义标签使用方法

    这篇文章主要介绍了ThinkPHP模板自定义标签使用方法,需要的朋友可以参考下  转之--http://www.jb51.net/article/51584.htm   使用模板标签可以让网站前台开发 ...

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

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

随机推荐

  1. Spring MVC POM示例

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/20 ...

  2. VMware下安装Ubuntu18.04时vmware tools安装问题

    在VMware下安装Ubuntu18.04时vmware tools关键步骤: 1.快捷键Ctrl+Alt+T,启动命令框,然后切换到root用户(切换命令为:sudo su,回车然后会提示你输入当前 ...

  3. 适用于 Windows 7 SP1、Windows Server 2008 R2 SP1 和 Windows Server 2008 SP2 的 .NET Framework 4.5.2 仅安全更新说明:2017 年 9 月 12 日

    https://support.microsoft.com/zh-cn/help/4040960/description-of-the-security-only-update-for-the-net ...

  4. iOS UI基础-12.0 Storyboard

    storyboard创建控制器 1.先加载storyboard文件(Test是storyboard的文件名) UIStoryboard *storyboard = [UIStoryboard stor ...

  5. 关于double精确度的简单问题

    (1)测试TestDouble.java结果 结果:如图,使用double类型的数据进行运算时结果是不准确的. 原因:double类型的数值占用64bit,即64个二进制数,除去最高位表示正负符号的位 ...

  6. Java之.jdk安装-Linux

    Jdk安装-Linux 1. 使用管理员,创建一个用户(charles),指令:useradd charles 2. 给创建的用户,添加密码(密码自己指定),指令:passwd charles 注意: ...

  7. SSH异常处理(一)

    Could not locate getter method for property [com.test_SSH.Employee#createTime] 这个异常是实体类没有映射到对应的.hbm. ...

  8. C# mongodb中内嵌文档数组条件查询

    样例数据: {      "_id" : "1064621564857",      "cNo" : "1064621564857 ...

  9. TP父类及模板继承

    一.TP父类方法继承 session用法 用登录页面做例子 <?php namespace Home\Controller; use Think\Controller; class LoginC ...

  10. c++ string split

    #include <iterator> #include <regex> std::vector<std::string> s_split(const std::s ...