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

现在项目目录下建立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 %}

浏览器中显示

最新文章

  1. angularjs中provider,factory,service的区别和用法
  2. NYOJ 461
  3. How to Failover the ‘Cluster Group’
  4. oracle时间处理
  5. delphi xe5 android 控制蓝牙
  6. app 的内存优化
  7. Linux Ubuntu download
  8. Java线程经典面试题
  9. MySQL(九)之数据表的查询详解(SELECT语法)二
  10. EF 数据重复和缺失问题(select 错误 )
  11. Java编程思想读书笔记(一)【对象导论】
  12. git push 小结
  13. 初探机器学习之使用讯飞TTS服务实现在线语音合成
  14. PythonStudy——闭包
  15. ios app qbw.plist demo
  16. 搭建hbase1.2.5完全分布式集群
  17. winfrom 动态添加控件,以及删除
  18. [剑指Offer]45-把数组排成最小的数
  19. 了解 Azure VM 的系统重启
  20. Java学习---Quartz定时任务快速入门

热门文章

  1. [VIJOS2053][SDOI2019]世界地图:最小生成树+虚树
  2. phpexcel 导出数字类型字段导出错误或者为空解决办法 (原)
  3. [CSP-S模拟测试]:打表(猜测题意+结论)
  4. 程序代码运行结果是(abdcbdcb)
  5. AOI 设计
  6. python3笔记十九:os和ospath模块
  7. P2010 回文日期
  8. Ubuntu16.04小白入门分享之 玩转Ruby你需要安装什么软件(持续更新)
  9. &quot;Developer tools access&quot; 需控制另一个进程才能继续调试 解决方案
  10. 三十:数据库之定义ORM模型,并映射到数据库