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:"吃金拱门~" %}

原文地址:https://www.cnblogs.com/forsaken627/p/12521967.html

时间: 2025-02-01 13:45:17

Django自定义simple_tag和filter的相关文章

18)django-模板的过滤器和tag,自定义simple_tag和filter

模板过滤器是在变量被显示前修改它的值的一个简单方法. 过滤器使用管道字符 . 模板标签(template tag) .标签(tag)定义比较明确,即: 仅通知模板系统完成某些工作的标签.  一:django自带过滤器 {{ name|lower }} 显示的内容是变量 {{ name }} 被过滤器 lower 处理后的结果,它功能是转换文本为小写{{ my_list|first|upper }} {{ bio|truncatewords:"30" }} addslashes : 添加

Django 自定义tag 和 filter

自定义tag 可以传递多个值,自定义filter最多值可以传递两个值 自定义filter 可以放在{% if %} 中,自定义tag 不可以 1.在  app 下新建一个package名字叫templatetags 2.在templatetags下创建一个python 文件 3. python中是自定义的代码 from django import template from django.utils.safestring import mark_safe #register 是固定的变量名,不能

django 自定义tag和filter

自定义的标签tag和filter,必须要放在已经在settings.py中INSTALLED_APP里面注册了的app下. 假设app是polls 首先,在polls目录下建立templatetags目录,结构如下: polls/ __init__.py models.py templatetags/ __init__.py   # 包含了__init__.py的才会被django认作是文件夹 polls_extras.py views.py 在模板中使用标签时要{% load polls_ex

django 自定义simple_tag

SIMPLE_TAG 1.在APP下创建templatetags目录.必须 是templatetags 2.在templatetags目录下创建tag.py,任意名 3.在tag.py 中 from django import template register=template.Libraty() @register.simple_tag def func(a1,a2,...): 这里写逻辑 return 逻辑返回的值 缺点:不能作为IF条件 优点:参数可以无数个 FILTER 1.在APP下

Django 自定义过滤器

设定自定义过滤器之前要现在配置文件内把自己项目名在 INSTALLED_APPS 内导入 #已安装的django应用 INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', #将自己的应用,填充

django 自定义user使用权限管理模块

这篇文章主要是讲如何让自定义的user模块也能用到django.contrib.auth中的权限管理模块 看这篇文章之前请先看一下我前边的两篇文章,本文以这两篇文章为基础: django 自定义 USER 用源码告诉你django权限管理是怎么回事 下边是一个大概的实现,后边再做详细分析: 1.user model自定义 class AbstractUser(models.Model): # 登录信息 id = models.AutoField(primary_key=True) staff =

django自定义标签

参考文章: http://xiao80xiao.iteye.com/blog/519394 (django 自定义标签和过滤器) http://www.cnblogs.com/btchenguang/archive/2012/09/05/2672364.html#WizKMOutline_1346841868165594 (Django框架学习-Templates进阶用法--下) 自定义标签放在app/templatetags下.下面是3个例子. 自定义标签1(过滤器): vim test_ta

django 自定义标签和过滤器

django 自定义标签和过滤器 Django支持自定义标签和过滤器.起初还不太重视它这项功能,但最近试了试自定义标签.发现django这个功能实在是太爽了. 首先在你项目的一个app中建立一个python源文件夹,(即文件夹里面要包含一个__init__.py.)文件夹名为templatetags.  此文件夹便是存放自定义标签和过滤器的源码的地方了. 再如果是在templatetags文件夹中定义了标签,如 test_tags.py,要如何使用我们自定义的test_tags.py呢.很简单,

django-自定义过滤器(simple_tag和filter)

关于Django的模板这里有详细介绍http://www.runoob.com/django/django-template.html 1.在app下创建templatetags的目录,在目录下创建test.py文件 2.test.py内容 1 #!/usr/bin/env python 2 #created by Baird 3 from django import template 4 5 register = template.Library() #注册 6 7 @register.sim