Django自定义simple_tag和filter
Posted forsaken627
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Django自定义simple_tag和filter相关的知识,希望对你有一定的参考价值。
摘要
1.模板:
模板是一个纯文本文件,或是一个用Django模板语言标记过的普通的Python字符串。 模板可以包含模板标签和变量。
而Django的模板引擎提供了一些类似于函数的功能,通过前端可以实现代码逻辑的功能,例如大小写转换、加减乘除等
2.模板标签:
是在一个模板里面起作用的的标记,可以产生控制结构的语句,也可以展现内容,或者获取其他的模板标签
内部提供的一些方法,官方参考链接
大家可以查看python3.6/site-packages/django/template/defaultfilters.py
中定义的方法,里面有很多,不对其一个个的列举,只提几个常用的:
{{ value|lower }}
字符串转换成小写{{ value|length }}
测量长度{{ value|make_list }}
将字符串转换为列表,内部其实调用的就是list(value)
{{ value|upper }}
转化成大写{{ value_list|first }}
获取列表的第一个元素,当然还有last{{ value_lsit|join:‘-‘ }}
像python一样,将一个列表转化为字符串,第二个参数是拼接的字符串{{ value|length_is:‘10‘ }}
判断一个对象的长度是否是多少,返回布尔值{{ value|random }}
在给定的字符串、列表(不能是一个字典)中随机取出一个来返回{{ value_lsit|slice:"0:3" }}
列表的切片,跟Python的语法相同{{ value|add:"value" }}
字符串拼接,类似于Python中的+
,需要保持数据类型的统一{{ value|date:"" }}
日期格式化{% now "jS F Y H:i" %}
与上相同,类似的还有time
{{ value|truncatewords:"30" }}
截取字符串的前30个字符- ...
自定义simple_tag
自己设定自己的一些小功能
- settings必须注册app
- 在app中新增
templatetags
目录,V3中不需要__init__.py
- 在改目录下创建py文件此处举例为
tag_add.py
,内容为一个个的函数方法
目录结构:
your_app01/
__init__.py
views.py
admin.py
models.py
templatetags/
__init__.py
tag_add.py
逻辑:
from django import template
from django.utils.safestring import mark_safe
register = template.Library()
# 写了两个简单的方法,作用都是返回两个值得和,也可以作为字符的拼接,此处使用装饰器来注册
@register.simple_tag # 注册自定义simple_tag
def bibibi(a1, a2):
return a1 + a2
@register.filter # 注册自定义过滤器filter
def lalala(a1, a2):
return a1 + a2
- 在html中使用,必须在html最头部加上
{% load tag_add.py %}
# 注意,改html中如果有继承其他模板,就必须放在{% extends 'layout.html' %}的后面
{#filter具体使用#}
{{ args1|lalala:'args2'
{#simple_tag具体使用,参数按照位置参数的方式传递#}
{{ bibibi args1 args1 }}
simple_tag和filter的区别
- simple_tag在参数接收的时候可以按照位置参数的方式传递很多个参数
- filter理论上只可以传递两个参数,但是万不得已我们可以把多个参数封装成一个参数中传递 ??
- 运用场景可以用在if-else判断,例如
{% if "Leon"|lalala:"吃金拱门~" %}
以上是关于Django自定义simple_tag和filter的主要内容,如果未能解决你的问题,请参考以下文章
simple_tag,filte,分页以及cookie和装饰器
Django(模板语言-自定义filter和simple_tag)
django-自定义过滤器(simple_tag和filter)