第5节----Django之自定义标签及过滤器
一.自定义过滤器怎么操作???????
操作顺序:设置文件路径>>>>>>定义编译函数>>>>>>注册自定义过滤器>>>>>>使用过滤器
1.设置文件路径:
注意模板文件放置在templates中,过滤器及模板标签放置在templatetags中,一定要注册放过滤器的common文件且与app目录同级,否则会报错

2.自定义过滤器的编写
common/templatetags.py
注意1-4必须完全有,注册的时候可以1.register.filter('cut',cut),2.@register.filter(name='myupper') name为空则以函数名为过滤器名字,有name值则以name值做为过滤器名字
# 1.导入template from django import template # 2.实例化register register = template.Library() # 3.定义过滤器函数 def cut(var,arg): return var.replace(arg,'') # 4.注册过滤器 register.filter('cut',cut) # 也可以使用装饰器@register.filter(name='cut')当有name的时候就一name的值做为过滤器的名字,无则以函数名字做为过滤器的名字 #使用装饰器注册 @register.filter(name='myupper') def myupper(var): return var.upper()
student/templates/selffilter.html
注意必须加载自定义的过滤器模块否则用不了
#注意必须加载自定义的过滤器模块否则用不了 {% load tags %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>自定义过滤器及标签</title> </head> <body> <p>{{ 'asasasadsdsds'|cut:'a' }}</p> <p>{{ 'asasasadsdsds'|myupper }}</p> </body> </html>
student/urls.py
from django.contrib import admin from django.urls import path from . import views urlpatterns = [ path('admin/', admin.site.urls), path('filter1/',views.selffilter), ]
student/views.py
from django.shortcuts import render def selffilter(request): return render(request,'student/selffilter.html'
运行结果

二.自定义标签
1.
#注意必须加载自定义的过滤器模块否则用不了 {% load zdy_tags %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>自定义过滤器及标签</title> </head> <body> <p>{% current_time1 '%Y-%m-5d'%}</p> <p>{% current_time2 %}</p> </body> </html>
student/urls.py
from django.contrib import admin from django.urls import path from . import views urlpatterns = [ path('admin/', admin.site.urls), path('filter1/',views.selffilter), ]
student/views.py
from django.shortcuts import render def selffilter(request): return render(request,'student/selffilter.html',context={"format_string":'%Y-%m-%d %H:%M:%S'})
common/templatetags/zdy_tags.py
from datetime import datetime # 1.导入template from django import template # 2.实例化register register = template.Library() #自定义模板标签 #注册自定义标签 @register.simple_tag def current_time1(format_string): return datetime.now().strftime(format_string) #你的模板标签需要访问当前上下文,你可以在注册标签时使用takes_context 参数︰ @register.simple_tag(takes_context=True) def current_time2(context): format_string = context.get("format_string") return datetime.now().strftime(format_string)
运行结果

2.
{% load zdy_tags %}
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>inclusion标签</title>
</head>
<body>
{% for i in choices %}
<p>{{ i }}</p>
{% endfor %}
</body>
</html>
studnet/templates/selffilter.html
#注意必须加载自定义的过滤器模块否则用不了 {% load zdy_tags %} <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>自定义过滤器及标签</title> </head> <body> <p>{% show_results %}</p> </body> </html>
common/templatetags/zdy_filter.py
from datetime import datetime # 1.导入template from django import template # 2.实例化register register = template.Library() #包含标签 @register.inclusion_tag('student/index1.html') def show_results(): li = ['python','java','c++'] return {'choices': li}
运行结果


浙公网安备 33010602011771号