Django——5 自定义过滤器及标签
Django
自定义过滤器
自定义过滤器就是一个带有一个或两个参数的Python 函数:
- - (输入的)变量的值 —— 不一定是字符串形式。
- - 参数的值 —— 可以有一个初始值,或者完全不要这个参数。
注册自定义过滤器
- django.template.Library.filter()
- Library.filter()方法需要两个参数:
- 过滤器的名称(一个字符串对象)
- 编译的函数 – 一个Python函数(不要把函数名写成字符串)
- 可以把register.filter()用作装饰器;
- 没有声明 name 参数,Django将使用函数名作为过滤器的名字。
首先需要新建一个包,以APP的形势存在(加入到INSTALLED_APPS中),例如新建一个comment的包(就是一个comment的文件夹,里面包含一个init的py文件)
然后在里面新建一个包,固定名字为templatetags,在里面新建一个py文件(自定义)
在settings中添加
my_filter中:定义了一个replace得过滤器,还有一个title得过滤器
from django import template
register = template.Library() @register.filter()
def my_cut(value, arg):
return value.replace(arg, '') @register.filter # 这个括号可以不加,还可以在括号里面重命名方法名
def my_capfirst(value):
return value.title()
views中:
from django.shortcuts import render def diy_filter(request):
return render(request, 'DIY/diy.html', context={
'string': 'hello django',
})
定义好url路径和视图,在html中:
{% load my_filter %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义内容</title>
<style>
</style>
</head>
<body>
<p>{{ string }}</p>
<p>django自带的首字母大写:{{ string|capfirst }}</p>
<p>自定义的首字母大写:{{ string|my_capfirst }}</p>
<p>django自带的cut:{{ string|cut:' ' }}</p>
<p>自定义的cut:{{ string|my_cut:' ' }}</p>
</body>
</html>
自定义标签
- 简单标签 django.template.Library.simple_tag()
- 包含标签 django.template.Library.inclusion_tag()
tag()方法有两个参数:
- 模板标记的名称 - 字符串。 如果省略,将使用编译函数的名称。
- 编译的函数 – 一个Python函数(不要把函数名写成字符串)与过滤器注册一样,也可以将其用作装饰器。
自定义简单标签
urls路径一样,视图添加一个时间格式
views:
from django.shortcuts import render def diy_filter(request):
return render(request, 'DIY/diy.html', context={
'string': 'hello django',
'time_format': '%Y年%m月%d日 %H:%M:%S',
})
my_filter:
from django import template
from datetime import datetime
register = template.Library() # 自定义标签
# 简单标签
@register.simple_tag
def current_time():
time_format = '%Y年%m月%d日 %H:%M:%S'
return datetime.now().strftime(time_format) @register.simple_tag
def current_time1(time_format):
return datetime.now().strftime(time_format) # 简单标签+上下文
@register.simple_tag(takes_context=True)
def current_time2(context):
time_format = context.get('time_format')
return datetime.now().strftime(time_format)
html中:
{% load my_filter %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义内容</title>
<style>
</style>
</head>
<body>
<p>方法里面传参:{% current_time %}</p>
<p>页面直接传参:{% current_time1 '%Y年%m月%d日 %H:%M:%S' %}</p>
<p>上下文传参:{% current_time2 %}</p>
</body>
</html>
自定义包含标签
包含标签的功能是可以通过渲染另外一个模板来显示一些数据
例如很多地方都可能会用到下面这几行代码,除了choices这个变量不一样之外,其他的都是格式都一样时,那么我们就可以把这部分代码封装在一个包含标签中.
<ul>
{% for i in choices %}
<li>{{ i }}</li>
{% endfor %}
</ul>
定义一个show_tags的html文件
% for foo in choice %}
<li>foo</li>
{% endfor %}
在views中添加一个列表:
from django.shortcuts import render def diy_filter(request):
return render(request, 'DIY/diy.html', context={
'list':['apple', 'pear', 'orange'],
})
my_filter中:
from django import template
from datetime import datetime
register = template.Library() # 包含标签
@register.inclusion_tag('DIY/show_tags.html')
def tags1():
li = ['a', 'b', 'c']
return {'choice': li} @register.inclusion_tag('DIY/show_tags.html')
def tags2(li):
return {'choice': li} @register.inclusion_tag('DIY/show_tags.html', takes_context=True)
def tags3(context):
return {'choice': context.get('list')}
html中
{% load my_filter %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>自定义内容</title>
<style>
</style>
</head>
<body>
<p>方法里面传参:{% tags1 %}</p>
<p>content里面传参:{% tags2 list %}</p>
<p>上下文传参:{% tags3 %}</p>
</body>
</html>
Django——5 自定义过滤器及标签的更多相关文章
- Django入门--自定义过滤器与标签
---恢复内容开始--- 为了让Django找到自定义的模板过滤器和模板标签,需要进行文件路径配置,配置方式分为APP目录下配置和项目路径下配置两种方式: 1.在APP目录下配置:针对某个应用特定的自 ...
- Django模板—-自定义过滤器和标签
一.filter和simple_tag 1.在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2.在app中创建template ...
- Django 05 自定义过滤器、自定义标签
Django 05 自定义过滤器.自定义标签 一.自定义过滤器 #1.在项目目录下创建一个python package包 取名为common(这个名字可以自定义) #2.在common目录下创建一个t ...
- django自定义过滤器和标签
1.自定义过滤器和标签的流程: 1.在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为app01的app下创建了一个templatetags的包,并在该包下创 ...
- 小白学习django第三站-自定义过滤器及标签
要使用自定义过滤器和标签,首先要设置好目录结构 现在项目目录下建立common的python包 再将common加入到setting.py中的INSTALLED_APP列表中 在common创建目录t ...
- Django学习——Django settings 源码、模板语法之传值、模板语法之获取值、模板语法之过滤器、模板语法之标签、自定义过滤器、标签、inclusion_tag、模板的导入、模板的继承
Django settings 源码 """ 1.django其实有两个配置文件 一个是暴露给用户可以自定义的配置文件 项目根目录下的settings.py 一个是项目默 ...
- 一、变量.二、过滤器(filter).三、标签(tag).四、条件分支tag.五、迭代器tag.六、自定义过滤器与标签.七、全系统过滤器(了解)
一.变量 ''' 1.视图函数可以通过两种方式将变量传递给模板页面 -- render(request, 'test_page.html', {'变量key1': '变量值1', ..., '变量ke ...
- Web框架之Django_04 模板层了解(过滤器、标签、自定义过滤器、标签、inclusion_tag、模板的继承与导入)
摘要: 模版层(模板语法) 模板语法 过滤器 标签 自定义过滤器.标签 inclusion_tag 模板的继承 模板的导入 一.模板语法: 常用语法:{{ }} 变量相关{% %} ...
- 自定义过滤器和标签 & 静态文件相关
自定义过滤器和标签 1.在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 2.在app中创建templatetags模块(模块名 ...
随机推荐
- android 获取屏幕的高度和宽度、获取控件在屏幕中的位置、获取屏幕中控件的高度和宽度
(一)获取屏幕的高度和宽度 有两种方法: 方法1: WindowManager wm = (WindowManager) getContext().getSystemService(Context.W ...
- loj 102 最小费用流
补一发费用流的代码 %%%棒神 #include<iostream> #include<cstdio> #include<cstring> #include< ...
- P3567 [POI2014]KUR-Couriers 主席树
这个题比一般主席树还要简单,但是用来练习主席树再好不过了,在这里我再放一下主席树板子. 代码: #include<iostream> #include<cstdio> #inc ...
- 洛谷P2744 [USACO5.3]量取牛奶Milk Measuring
题目描述 农夫约翰要量取 Q(1 <= Q <= 20,000)夸脱(夸脱,quarts,容积单位--译者注) 他的最好的牛奶,并把它装入一个大瓶子中卖出.消费者要多少,他就给多少,从不有 ...
- Poj2054 color a tree && [HNOI/AHOI2018]排列
https://zybuluo.com/ysner/note/1120723 题面 原题 某省选强化题 大致意思是给你一颗树,选父亲后才能选儿子. 每个点对答案的贡献为你在第几次选这个点 × 该点权值 ...
- PCB MS SQL 存储过程(CLR) 实现Json转DataTable表的方法
一.准备需转为DataTable的json字符串 原json字符串数据 [{"TechName":"ECN","TechNo":" ...
- myeclipse配背景色
1:使jsp,html等页面为纯黑色. 2:发现JS的背景颜色还是默认的.而且还是块状的.将它设置背景为黑色的. *效果图: 参考:http://blog.csdn.net/ltqwby/articl ...
- [Swift通天遁地]四、网络和线程-(5)解析网络请求数据:String(字符串)、Data(二进制数据)和JSON数据
★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★➤微信公众号:山青咏芝(shanqingyongzhi)➤博客园地址:山青咏芝(https://www.cnblogs. ...
- glances内存分析工具使用
glances -b 以字节为单位显示网络流量 glances 是一个命令行工具包括如下命令选项:-b:显示网络连接速度 Byte/ 秒-B @IP|host :绑定服务器端 IP 地址或者主机名称- ...
- 涨知识 - II
计算机网络相关 1.在无盘工作站向服务器申请IP地址时,使用的是( )协议. A.ARP B.RARP C.ICMP D.IGMP 解析: ARP(地址解析协议)是设备通过自己知道的IP地址来 ...