要使用自定义过滤器和标签,首先要设置好目录结构

现在项目目录下建立common的python包

再将common加入到setting.py中的INSTALLED_APP列表中

在common创建目录templatetags,再在其中创建自定义过滤器和标签等

在自定义common_extras.py中编写自定义过滤器和标签

from django import template
import datetime register = template.Library() # 固定写法 @register.filter
def my_sort(value):
a = sorted(value)
return a @register.filter('myup')
def my_upper(value):
return value.upper() @register.filter
def my_cut(value, arg):
c = value.replace(arg, '+')
return c # 不带参数
@register.simple_tag
def current_time1():
format_string = "%Y年%m月%d日 %H:%M:%S"
return datetime.datetime.now().strftime(format_string) # 带参数
@register.simple_tag
def current_time2(formate_string):
return datetime.datetime.now().strftime(formate_string) # 带上下文参数的
@register.simple_tag(takes_context=True) # 允许使用上下文
def current_time3(context):
format_string = context.get('format_string')
return datetime.datetime.now().strftime(format_string)
# format_string = context.get('format_string')
# return format_string @register.simple_tag
def add(a, b):
c = a + b
return c @register.simple_tag(takes_context=True)
def sorted1(context):
b = context.get('list')
return sorted(b)
# 包含标签
# 不带参数
@register.inclusion_tag('test_app/show_takes.html')
def show_results1():
li = ['web', 'c++', 'python', 'java', 'php']
return {'choice': li} # 带参数
@register.inclusion_tag('test_app/show_takes.html')
def show_results2(li):
return {'choice': li} # 上下文参数
@register.inclusion_tag('test_app/show_takes.html', takes_context=True)
def show_results3(context):
data = context.get('list')
return {'choice': data}

test HTML中编写

{%  load common_extras %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>title</title>
</head>
<body>
<ul style="color: blue">自定义过滤器
<li>将名字大写:{{ name|myup }}</li>
<li>将列表按顺序:{{ list|my_sort }}</li>
<li>替换字母{{ name }}:{{ name|my_cut:'u' }}</li>
</ul> <ul style="color:green">简单自定义标签
<li>不带参数输出:{% current_time1 %}</li>
<li>带参数输出:{% current_time2 "%Y年%m月%d日 %H:%M:%S" %}</li>
<li>使用上下文输出:{% current_time3 %}</li>
<li>使用加法:{% add 1 2 %}</li>
<li>使用上下文排序:{% sorted1 %}</li>
</ul> <ul style="color:red">包含自定义标签
<li>不带参数:{% show_results1 %}</li>
<li>带参数:{% show_results2 '12345' %}</li>
<li>使用上下文:{% show_results3 %}</li>
</ul>
</body>
</html>

test.py 文件中编写

def func(requset):
return render(requset, 'test_app/test1.html',
context={
'name': 'xuning',
'age': 33,
'list': [1, 2, 4, 3, 6, 5],
'format_string': "%Y年%m月%d日 %H:%M:%S",
})

show_take.html 文件中编写(包含标签):多次调用这个方法,只有choice变量这个不同,可以将这部分代码进行封装

{% for i in choice %}
{{ i }}
{% endfor %}

浏览器中显示

小白学习django第三站-自定义过滤器及标签的更多相关文章

  1. Django之模板层-自定义过滤器以及标签

    自定义标签与过滤器 在settings中的INSTALLED_APPS配置当前app,不然django无法找到自定义的simple_tag. 在app中创建templatetags模块(模块名只能是t ...

  2. 小白学习django第四站-关联数据库

    使用mysql连接django首先要配置好相关环境 首先在setting.py配置数据库信息(需要现在mysql中创建一个数据库) 在setting.py那个目录的__init__.py文件中写入 之 ...

  3. 小白学习django第六站-http相关

    请求与相应 HttpRequest对象API def home(request): print('path:', request.path) print('mothod:', request.meth ...

  4. 小白学习django第五站-简易案例

    首先在setting.py文件中编写数据库配置内容 DATABASES = { 'default': { 'ENGINE': 'django.db.backends.mysql', 'NAME': ' ...

  5. Django学习——Django settings 源码、模板语法之传值、模板语法之获取值、模板语法之过滤器、模板语法之标签、自定义过滤器、标签、inclusion_tag、模板的导入、模板的继承

    Django settings 源码 """ 1.django其实有两个配置文件 一个是暴露给用户可以自定义的配置文件 项目根目录下的settings.py 一个是项目默 ...

  6. 一、变量.二、过滤器(filter).三、标签(tag).四、条件分支tag.五、迭代器tag.六、自定义过滤器与标签.七、全系统过滤器(了解)

    一.变量 ''' 1.视图函数可以通过两种方式将变量传递给模板页面 -- render(request, 'test_page.html', {'变量key1': '变量值1', ..., '变量ke ...

  7. Django入门--自定义过滤器与标签

    ---恢复内容开始--- 为了让Django找到自定义的模板过滤器和模板标签,需要进行文件路径配置,配置方式分为APP目录下配置和项目路径下配置两种方式: 1.在APP目录下配置:针对某个应用特定的自 ...

  8. django自定义过滤器和标签

    1.自定义过滤器和标签的流程: 1.在某个app下创建一个名为templatetags(必需,且包名不可变)的包.假设我们在名为app01的app下创建了一个templatetags的包,并在该包下创 ...

  9. Web框架之Django_04 模板层了解(过滤器、标签、自定义过滤器、标签、inclusion_tag、模板的继承与导入)

    摘要: 模版层(模板语法) 模板语法 过滤器 标签 自定义过滤器.标签 inclusion_tag 模板的继承 模板的导入 一.模板语法: 常用语法:{{     }}    变量相关{% %}    ...

随机推荐

  1. cogs1619. [HEOI2012]采花 x

    1619. [HEOI2012]采花 ★★☆   输入文件:1flower.in   输出文件:1flower.out   简单对比时间限制:5 s   内存限制:128 MB [题目描述] 萧薰儿是 ...

  2. 【转载】多网卡的7种bond模式原理

    多网卡的7种bond模式原理 Linux 多网卡绑定 网卡绑定mode共有七种(0~6) bond0.bond1.bond2.bond3.bond4.bond5.bond6 常用的有三种 mode=0 ...

  3. hash索引

    hash算法 哈希表(hash table ,也叫散列表),是根据关键码值(key value)而直接进行访问的数据结构.也就是说,它通过把关键码值映射到表中一个位置来访问记录,以加快查找的速度.这个 ...

  4. [The Annotated Transformer] Iterators

    Iterators 对torchtext的batch实现的修改算法原理 Batching matters a ton for speed. We want to have very evenly di ...

  5. JavaWeb_(SSH论坛)_四、页面显示

    基于SSH框架的小型论坛项目 一.项目入门 传送门 二.框架整合 传送门 三.用户模块 传送门 四.页面显示 传送门 五.帖子模块 传送门 六.点赞模块 传送门 七.辅助模块 传送门 帖子表与回复表 ...

  6. 01.二维数组中的查找 (Java)

    题目描述 在一个二维数组中(每个一维数组的长度相同),每一行都按照从左到右递增的顺序排序,每一列都按照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个整数,判断数组中是否含有该整数 ...

  7. 【学习】linux环境下nginx文件彻底删除

    nginx卸载其实很简单,只需要两步即可完成!第一步:输入以下指令全局查找nginx相关的文件: sudo find / -name nginx* 第二步:删除查找出来的所有nginx相关文件 sud ...

  8. leetcode-easy-dynamic-198 House Robber-NO

    mycode 思路: a:1 2 3 4 5 6 7 8 9 f(9) =max( f(7) + a9 ,f(8)) 前一步.前两步 至于前三步 f(9) = f(6)+ a9,但其实f(7)在求值的 ...

  9. leetcode 148排序链表

    优先队列容器,使用小顶堆排序:timeO(nlogn) spaceO(n) /** * Definition for singly-linked list. * struct ListNode { * ...

  10. 浏览器端-W3School-JavaScript:JavaScript String 对象

    ylbtech-浏览器端-W3School-JavaScript:JavaScript String 对象 1.返回顶部 1. JavaScript String 对象 String 对象 Strin ...