• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
难受得一匹
博客园    首页    新随笔    联系   管理    订阅  订阅
自定义过滤器以及标签

自定义过滤器以及标签

自定义模板过滤器

代码布局

- 创建并放在app目录下的名为templatetags的文件夹下(规定的name),该文件夹必须是一个pthon的包。这个文件夹一定有一个```__init__.py```文件 - 自定义模板标签或模板过滤器,就放在这个包下到的python模块中(python文件) - app必须再settings中被注册

定义过滤器

- 自定义过滤器其实就是一个python函数,他有一个或者 俩个参数 - 第一个参数是传进来的模板变量 - 第二个参数就是一个普通参数,可以实默认参数,也可以不要这个参数

注册

#自定义模板过滤器
from django.template import Library

register = Library()#必须用register这个变量名
def my_change_sex(value):
    #转换性别的过滤器
    map = {
        '0': '女',
        '1': '男'
    }
    return map[value]

register.filter(my_change_sex)#代表注册了

在模板中使用

1. load标签,引入自定义的过滤模块,也就是templatetages包里的python文件。例如:```{% load teacher_filters%}``` 2. 注意:新建自定义后,要重启服务器

补充:

  • name:可以给函数命名。例如:register.filter(‘aaa',my_change_sex)将函数名改为了aaa,引用的时候使用aaa就OK。
  • 两个参数:
def my_change_sex(value,language='chinese'):
    #转换性别的过滤器
    map = {
       'chinese': {'0': '女', '1': '男'},
       'English': {'0': 'woman', '1': 'man'}
    }
    return map[language][value]

使用修饰器注册:

from django.template import Library

@register.filter(name='change')

def my_change_sex(value,language='chinese'):
    #转换性别的过滤器
    map = {
       'chinese': {'0': '女', '1': '男'},
       'English': {'0': 'woman', '1': 'man'}
    }
    return map[language][value]

自定义模板标签

标签类型

简单标签

  • 接收许多参数

创建,注册

代码布局和过滤器一样

from django.template import  Library
from  datetime import  datetime
register = Library()

def current_time(format_str='%Y-%m-%d %H:%M:%S'):
    return datetime.now().strftime(format_str)

register.simple_tag(current_time)#注册

应用方法:{% load name %}

使用修饰器:效果一样

from django.template import  Library
from  datetime import  datetime
register = Library()

@register.simple_tag(name='current',takes_context=True)
def current_time(format_str='%Y-%m-%d %H:%M:%S'):
    return datetime.now().strftime(format_str)

使用上下文变量

使用当前模板中的上下文变量context

from django.template import  Library
from  datetime import  datetime
register = Library()

def current_time(context,format_str='%Y-%m-%d %H:%M:%S'):
    return datetime.now().strftime(format_str)

register.simple_tag(current_time,takes_context=True)#注册

包含标签

通过渲染另外一个模板,来展示数据

定义

def show_list(list_data):
    return {'ls': list_data}

t = get_template('teacher/show_list.html')
register.inclusion_tag(t)(show_list)#注册	

使用装饰器注册:

@register.inclusion_tag('teacher/show_list.html')
def show_list(list_data):
    return {'ls': list_data}

举例:
自定义模板:

from django.template import  Library
from  datetime import  datetime
register = Library()
@register.inclusion_tag('teacher/show_list.html')
def show_list(list_data):
    return {'ls': list_data}

HTML:(修饰)

<ul>
    {% for l in ls %}
        <li>{{ l }}</li>
    {% endfor %}
</ul>

使用:

<td>
    {% show_list student.hobby %}
</td>

效果:

个人心得:
自定义标签的逻辑就是:

  1. 创建自定义模板
  2. html上获取视图def传入参数
  3. 使用自定义模块
  4. 将参数传递到模块中,模块def进行参数处理
  5. 处理后返回修饰后的结果

引用上下文变量

加上takes_context=Ture,同简单标签

posted on 2019-04-02 19:12  难受得一匹  阅读(169)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3