要使用自定义过滤器和标签,首先要设置好目录结构
现在项目目录下建立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 %}
浏览器中显示
原文:https://www.cnblogs.com/xnnx/p/11294939.html