Django搭建个人博客:自定义模板过滤器和标签

现在我们已经很熟悉Django的MTV模式了。模板(template)负责如何去展示数据,而视图(view)负责筛选出正确的数据。因此通常来说逻辑都是放到视图中的,但模板也需要一些和表示相关的逻辑:比如循环展示(如{% for ... %})、或者以某种特定格式输出(如{ { ...|date:'Y-m-d' }})等,这些功能都是靠模板的**过滤器(filters)标签(tags)**实现的。

Django的模板语言包含了很多内置的过滤器和标签,设计目的是满足应用需要占位逻辑需求。但有的时候这些通用的功能满足不了你的某些需求,这时候就需要自定义过滤器和标签来实现了。

前置条件

要在Django中使用模板过滤器或标签,就首先得注册它们。

注册方法如下:

  • 在APP中新建名为templatetags的目录(方便起见,教程选择了article这个APP)
  • 在此目录中新建名为__init__.py的空文件,使得此目录被视作一个Python的包
  • 在此目录中新建python文件(比如my_filters_and_tags.py),就可以在里面愉快的写代码啦

完成后的目录结构如下:

article/
    __init__.py
    views.py
    models.py
    # 新增目录
    templatetags/
        __init__.py  # 空文件
        my_filters_and_tags.py  # 即将写代码的地方
    ...

请注意

  • 目录必须位于已注册的APP中,这是出于安全性的考虑
  • 新建目录后,必须手动重启服务器,里面的过滤器和标签才能生效

前置条件就完成了,接下来我们看看如何写一个模板过滤器。

模板过滤器

过滤器filter的表现形式为紧跟在上下文后面的管道符|,管道符后面是filter的名称:{ { ...|filter_name }}。有的filter还可以带有参数:{ { ...|filter_name:var }}

注意过滤器名称的冒号后面不能有空格。

filter这个名字可能会让你误认为它只是用来筛选某些特定数据的,但实际上它远不止这点功能。它可以改变上下文的最终展示效果,也可以将上下文通过运算输出为特定的值。

小试牛刀

要成为一个可用的filter,文件中必须包含一个名为 register 的模块级变量,它是一个 template.Library 实例,所有的filters均在其中注册。所以在my_filter_and_tags.py文件中输入以下内容:

article/templatetags/my_filter_and_tags.py

from django import template
register = template.Library()

接下来就可以像写普通的Python函数一样写过滤器了:

article/templatetags/my_filter_and_tags.py

from django import template
register = template.Library()

@register.filter(name='transfer')
def transfer(value, arg):
    """将输出强制转换为字符串 arg """
    return arg

@register.filter()
def lower(value):
    """将字符串转换为小写字符"""
    return value.lower(
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值