自定义过滤器及标签

自定义过滤器及标签

代码布局(要死记)

#  在app目录下新建一个名为templatetags的文件夹,必须取这个名字,这个文件夹必须是一个python的包,就是一定有__ init __.py文件

#  app必须在settings中被注册

一、自定义过滤器

定义:自定义过滤器就是一个python函数,它有一个或2个参数

特点:第一个参数就是那个传进来的模板变量;第二个参数就是一个普通参数,可以是默认参数,也可以不要这个参数

例1、(当一个参数的时候)操作:

第一步:在app目录下新建python package 取名为templatetags文件夹

第二步:在templatetags文件夹下新建一个python文件,取名为teacher_filters.py文件

第三步:在teacher_filters.py文件中写入函数代码(功能转换性别的过滤器):

  from django.template  import  Library

  register = Library()  (必须用register这个变量)

      @register.filter(name = 'male')   (# 这句装饰器一定要写,表示注册)

      def   my_male(value):

        map={0:"女",1:"男"}

        return  map[value]

第四步:在模板中使用(用Load标签,引入自定义的过滤器模块,也就是templatetags文件包里的teacher_filters.py文件)

 打开student_list_page.html文件写入

    {%  load  teacher_filters %}  (这句话写在头部)

    <td> {{ student.sex | male }}</td>

例2:(当二个参数的时候)操作:

第一步,第二步同上

第三步:在teacher_filters.py文件中写入函数代码(功能转换性别的过滤器):

  from django.template  import  Library

  register = Library()  (必须用register这个变量)

      @register.filter(name = 'male')   (# 这句装饰器一定要写,表示注册)

      def   my_male(value,language = 'zh'):

        map={ 'zh':{0:"女",1:"男"},‘en’:{0:"girl",1:"boy"} }

        return  map [language] [value]

第四步:在模板中使用(用Load标签,引入自定义的过滤器模块,也就是templatetags文件包里的teacher_filters.py文件)

 打开student_list_page.html文件写入

    {%  load  teacher_filters %}  (这句话写在头部)

    <td> {{ student.sex | male:'en' }}</td>

 注:第二个参数language的默认值是'zh',如果写了en值 的话,就是英文的girl和boy 

二、自定义模板标签

1、简单标签

注册用:djagno.template.Library.simple_tag()

可以接收需多参数

代码布局与自定义过滤器一样

第一步:在templatetags文件夹中新建一个teacher_tags.py文件

第二步:在teacher_tags.py文件中写入函数代码(功能是显示当前日期时间)

    from django.template import Library

    from datetime import datetime

    register = Library()

    @register.simple_tag(name='current')取个名字

    def  current_time(format_str = '%Y-%m-%d  %H:%M:%S'):

      return  datetime.now().strftime(format_str)

第三步:使用,打开base.html文件,在头部写入{% Load  teacher_tags %};然后在中间写入{ %  current  %},这样就使用完成了

2、包含标签  (嵌套标签)

通过渲染另外一个模板展示数据,就是一个嵌套函数,实现展示列表数据

第一步:在teacher_tags.py 文件中新建一个函数如下:

@register.inclusion_tag('teacher/show_list.html')
def show_list(list_data):
return {'ls': list_data}
第二步:在新建一个show_list.html文件,内容如下:
<ul>
{% for L in ls %}
<li> {{ L }} </li>
{% endfor %}
</ul>
第三步:在student_list_page.html中使用:
<td>{% show_list  student.hobby %}</td>

 

     

posted on 2019-03-26 17:27  nickshen  阅读(386)  评论(0编辑  收藏  举报

导航