django 自定模板标签的注册
首先注册方法一般都是先实例化一个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使用Channels实现WebSocket
- Django-权限信息自定义标签
- 通过Nginx部署Django(基于ubuntu)
- 第三百八十二节,Django+Xadmin打造上线标准的在线教育平台—xadmin管理员详情页面布局,导航图标设置
- 第三百零六节,Django框架,models.py模块,数据库操作——创建表、数据类型、索引、admin后台,补充Django目录说明以及全局配置文件配置
- django模板语言转义处理
- django框架基础-django模板语言-长期维护
- 02-django查询
- [Django] Auth django app with rest api
- [Django] Start a new django project
- django celery redis简单测试
- django框架进阶-CSRF认证
- django框架基础-django模板语言-长期维护
- Django 3.2.5博客开发教程:实现模板之前的分析与准备
- Python Django模板页面自定义过滤器实现md语法及字符串切割代码示例
- Python Django 多对多表设计批量插入方法示例
- Python Django 图片上传及显示代码示例
- python编程:Django常用的模板语言标签
- Django 模板系统(template)
- Django===django工作流
- Django(10)-模板层的变量和标签
- python库Django链接mysql数据库做网站(一)--构建基本结构访问静态页面