django模板-自定义标签、过滤器

本文深入解析Django模板语言,涵盖内置过滤器如add、cut、capfirst、default和date的使用方法,自定义过滤器与标签的创建过程,以及常见模板标签的使用技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、django自带过滤器

过滤器语法格式:{{  para1 | filter:para2  }}

1.add过滤器:将两个数相加或字符串、列表等进行拼接

def add(request):
    context={'l1':[1,'hello','hi'],'l2':['nice',True]}
    return render(request,'add.html',context=context)
……
<body>
  <p>{{ 4|add:2|add:6}}</p>  <!--12-->
  <p>{{ '4'|add:'hello' }}</p>  <!--4hello-->
  <p>{{ l1|add:l2 }}</p>  <!--[1,'hello','hi','nice',True]-->
  <!--不能将整数和字符串拼接,否则会报错,例如{{ 4|add:'hello' }}-->
</body>
……

 

 2.cut过滤器:从字符串、列表、元组等移除一部分

def cut(request):
    context={'a':'abc','b':'bcd'}
    return render(request,'cut.html',context=context)
……
<body>
    <p>{{ a|cut:'a' }}</p>  <!--bc-->
    <p>{{ 'good job'|cut:' ' }}</p> <!--goodjob-->
</body>
……

 

3.capfirst过滤器:首字母大写

<p>{{ 'hello world'|capfirst }}</p>  <!--Hello World-->

 

4.default过滤器:如果对象为空(空字符串、空列表、空字典等),则显示为defaulte指定的值

<p>{{ ''|default:'空字符串' }}</p>  <!--空字符串-->
<p>{{ []|default:'空列表' }}</p>  <!--空列表-->
<p>{{ {}|default:'空字典' }}</p>  <!--空字典-->

 

5.date过滤器:将日期按照指定格式处理并显示

from datetime import datetime
def date(request):
    context={'time':datetime.now()}
    return render(request,'date.html',context=context)
{{ time|date:'Y/m/d H:i:s' }}  <!--2018/12/17 19:42:06-->

 

 二、自定义过滤器和标签

1.自定义标签和自定义过滤器的区别:

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

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

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

 

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

①将要创建自定义标签或过滤器的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>

浏览器结果显示

  

 

三、 其他可能会用到的标签

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

 

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

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

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

 

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

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

 

转载于:https://www.cnblogs.com/Forever77/p/10126678.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值