博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Django 框架13: 自定义过滤器和标签
阅读量:6323 次
发布时间:2019-06-22

本文共 1855 字,大约阅读时间需要 6 分钟。

hot3.png

    Django的模板系统自带了一系列的内建标签和过滤器,一般情况下可以满足开发要求,如果觉得需更精准的模板标签或者过滤器,可以自己编写模板标签和过滤器,然后使用{% load %}标签使用他们。最好是查看Django的文档:,这里仅仅简单的叙述一下,大部分还是参考官方文档。

自定义过滤器

1.代码布局  

       自定义标签和过滤器必须依赖于一个django app,也就是说,自定义标签和过滤器是绑定app的。该app应该包含一个templatetags目录,这个目录应该和model.py,views.py在同一个层级,记得在该目录下建立一个__init__.py文件一遍django知道这是一个python包。在该目录下,你可以新建一个python模块文件,文件名不要和其他app中的冲突就好。例如:

polls/    models.py    templatetags/        __init__.py        poll_extras.py    views.py

    然后在你的模板文件中你可以这样使用你的自定义标签和过滤器:

{% load poll_extras %}

    注意事项:

           包含templatetags目录的app一定要在INSTALLED_APPS列表里面
           {% load %}load的是模块名,而不是app名
           记得要引入template模块,创建一个register对象

from django import templateregister=template.Library() # 注册

2.编写自定义过滤器

    自定义过滤器就是接受一个或者连个参数的python函数。例如{
{var | foo:"bar"}},过滤器foo接受变量var和参数bar。
    过滤器函数总要返回一些内容,并且不应该抛出异常,如果有异常,也应该安静的出错,所以出错的时候要不返回原始的输入或者空串,下面是一个例子:

def cut(value, arg):    """Removes all values of arg from the given string"""    return value.replace(arg, '')# 使用{
{ somevariable|cut:"0" }}

    如果过滤器不接受参数,只需要这样写

def lower(value): # 只有一个参数    return value.lower()

3.注册自定义的过滤器  

    一旦定义好你的过滤器,你需要注册这个过滤器,有两种方式,一种是上面提到的template.Library(),另一种是装饰器

#第一种方法register.filter('cut', cut)register.filter('lower', lower)#第二种方法@register.filter(name='cut')def cut(value, arg):    return value.replace(arg, '')@register.filterdef lower(value):    return value.lower()

    详细内容请查阅Django的文档:

编写自定义模板标签

    标签比过滤器更复杂,因为标签可以做任何事情。Django提供了许多快捷方式,可以更轻松地编写大多数类型的标签。首先,我们将探索这些快捷方式,然后解释如何在快捷方式不够强大的情况下从头开始编写标记

    为了简化这些类型标签的创建,Django提供了一个辅助函数 simple_tag。这个函数是一个方法 django.template.Library,它接受一个接受任意数量参数的函数,将它包装在一个render函数中,并将上面提到的其他必要位包装在模板系统中
    current_time因此,我们的函数可以这样写:

import datetimefrom django import templateregister = template.Library()@register.simple_tagdef current_time(format_string):    return datetime.datetime.now().strftime(format_string)

    更多内容还请查阅Django的文档:,不过这些已经基本足够使用了。

转载于:https://my.oschina.net/zhenfei/blog/1929908

你可能感兴趣的文章
自适应网页布局经验
查看>>
Ubuntu apache 禁止目录浏览
查看>>
常用脚本--归档ERRORLOG
查看>>
js网页倒计时精确到秒级
查看>>
常用CSS缩写语法总结
查看>>
TDD:什么是桩(stub)和模拟(mock)?
查看>>
C# 模拟POST提交文件
查看>>
PAT 解题报告 1004. Counting Leaves (30)
查看>>
Android开发之蓝牙 --修改本机蓝牙设备的可见性,并扫描周围可用的蓝牙设备
查看>>
[Head First设计模式]生活中学设计模式——外观模式
查看>>
Repository模式中,Update总是失败及其解析
查看>>
.Net 转战 Android 4.4 日常笔记(2)--HelloWorld入门程序
查看>>
[原创]浅谈测试团队转型,思维模式的转变是关键
查看>>
Redis学习-SortedSet
查看>>
android CoordinatorLayout使用
查看>>
机器学习资料大汇总
查看>>
Python selenium 滚动条 详解
查看>>
poj1035Spell checker
查看>>
微信程序开发
查看>>
如何退出minicom【学习笔记】
查看>>