首先注册方法一般都是先实例化一个template.Library。如:

from django import template

register = template.Library()

1.注册自定义过滤器方法

register.filter('A',b)

filter()方法中的2个参数分别:A过滤器的名称(一个字串)和 b过滤器函数本身。

2.注册自定义模板标签方法

register.tag('A',b)

tag()方法需要2个参数:模板标签的名字A和编译的函数b。

3.注册简单标签的方法如:if ,for ,ifequal等等

register.simple_tag(A)

该辅助函数传递的函数只有(单个)参数,参数两边的引号(如果有的话)已被截掉了所以只可能接收到一个普通的Unicode字符串。

4.注册包含标签的方法

register.inclusion_tag('A.html')(B)

inclusion_tag()方法需要2个参数:模板所在的文件A和编译的函数B。

有时候,包含标签需要访问父模板的context.此时可用到takes_context选项,即设置takes_context=True,并且该标签不需要参数,且下面的Python函数会带一个参数:就是当这个标签被调用时的模板context.

@register.inclusion_tag('A.html',takes_context=True)
def jump_link(context):#此处参数必须是context
return {
'link':context['home_link'],
'title':context['home_title'],
#此处有包含指向主页的变量,即取home_link和home_title中的变量link和title的值
}

然后创建A.html,里面可能包含下面内容:

XXXXX<a href="{{ link }}">{{ title }}</a>xxxxxx    该处的link和title分别取自home_link和home_title中的内容。

如果要调用该参数,可以直接加载它的库,然后不带参数地调用它{{ jump_link }}

5.编写自定义模板加载器

load_template_source(template_name,template_dirs=None)

template_name是加载模板的名称,类似于loader.get_template()或者loader.select_template()

template_dirs是一个可选的代替TEMPLATE_DIRS的搜索目录列表

如果加载器能够成功的加载一个模板,此时会返回一个元组(template_source,template_path),template_source:模板引擎编译的模板字符串、template_path:被加载的模板路径。若加载器加载模板失败,那么会触发django.template.TemplateDoesNotExist异常。

注:在上面代码中看到@xxxx,这样的写法,改语法在python 2.4及以上版本中成立,即:

@register.tag(name="A")     #A过滤器的名称(一个字串)
def B(parser.token):
#.....

或者直接写成:

@register.tag
def B(parser,token):
#......

Django此处会使用函数名称B来作为标签名称

此处只举一例,其他写法类似。另如有不同看法,欢迎来讨论。

django 自定模板标签的注册的更多相关文章

  1. Django项目中模板标签及模板的继承与引用【网站中快速布置广告】

    Django项目中模板标签及模板的继承与引用 常见模板标签 {% static %} {% for x in range(x) %}{% endfor %} 循环的序号{% forloop %} 循环 ...

  2. Django内置模板标签

    Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cy ...

  3. 第三章:模版层 - 2:Django内置模板标签

    Django内置标签总览 可以查询下表来总览Django的内置标签: 标签 说明 autoescape 自动转义开关 block 块引用 comment 注释 csrf_token CSRF令牌 cy ...

  4. Django常用的模板标签

    django 目前了解的各个文件的作用: manage.py:  运行服务 urls: 路由 views: 处理数据 传递给 html模板 html文件:  通过 {{变量名}}接收变量 通过 模板标 ...

  5. Django 内置模板标签和过滤器

    一.内置模板标签 语法:{%  %} autoescape : 是否转义,on或off作为参数,并确定自动转义是否在块内有效.该块以endautoescape结束 {% autoescape on % ...

  6. python3之Django内置模板标签和过滤器

    一.模板标签 内置标签: 1.autoescape 控制当前的自动转义行为,此标记采用on或者off作为参数,并确定自动转义是否在块内有效.该块以endautoescape结束标签关闭. views: ...

  7. Django学习之模板标签和变量

    safe过滤器和{% autoescape %}标签 首先看这样一个例子: views.py中: c = '<h3>更上一层楼</h3>' render(request,'te ...

  8. django 学习-4 模板标签

    1.第一个标签是 if 标签 vim  learn/home.html <!DOCTYPE html><html><head>        <title&g ...

  9. Django extend(继承)模板标签

    在 views.py 上修改 ... def ordered(req): return render(req, "ordered.html") def shopping_car(r ...

随机推荐

  1. SpringMVC 利用AbstractRoutingDataSource实现动态数据源切换

    SpringMVC 利用AbstractRoutingDataSource实现动态数据源切换 本文转载至:http://exceptioneye.iteye.com/blog/1698064 Spri ...

  2. openwrt使用list

    openwrt中用到双向无头链表,实际应用时应在外部定义实体链表头,后续可直接应用链表函数(宏定义已将链表头排除在外): static struct list_head timeouts = LIST ...

  3. excel导出功能优化

    先说说优化前,怎么做EXCEL导出功能的: 1. 先定义一个VO类,类中的字段按照EXCEL的顺序定义,并且该类只能用于EXCEL导出使用,不能随便修改. 2. 将查询到的结果集循环写入到这个VO类中 ...

  4. 怎样编写socket套接字

    watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQv/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/ ...

  5. js学习笔记30----对象

    面向对象 对象:是一个整体,对外提供一些操作.JavaScript的所有数据都可以被视为对象.简单说,所谓对象,就是一种无序的数据集合,由若干个“键值对”(key-value)构成. 比如说: var ...

  6. Bars, rectangles with bases on x-axis

    Usage geom_bar(mapping = NULL, data = NULL, stat = "bin", position = "stack", .. ...

  7. 谈谈Java中整数类型(short int long)的存储方式

    在java中的整数类型有四种,分别是byte short in long,本文重点给大家介绍java中的整数类型(short int long),由于byte只是一个字节0或1,在此就不多说了,对ja ...

  8. PHPOffice下PHPWord生成Word2007(docx)使用方法

    要正常使用,下载依赖包: PhpOffice/Common:https://github.com/PHPOffice/Common Zend/Escaper:https://github.com/ze ...

  9. php将汉字转换为拼音和得到词语首字母(四)

    <?php function getfirstchar($s0){ $firstchar_ord=ord(strtoupper($s0{0})); if (($firstchar_ord> ...

  10. 简单日历插件jquery.date_input.pack

    html: <link rel="stylesheet" type="text/css" href="css/jquery.date_input ...