第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.简单标签:django.template.Library.simple_tag()

student/templates/selffilter.html

#注意必须加载自定义的过滤器模块否则用不了
{% 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.包含标签django.template.Library.inclusion_tag()

这种模板标签是通过渲染另外一个模板来显示一些数据。这些类型的标签被称为"Inclusion 标签"。

student/index1.html

{% 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}

运行结果

 

posted @ 2020-03-29 23:31  faval  阅读(87)  评论(0)    收藏  举报