详解Python的Django框架中inclusion_tag的使用


Posted in Python onJuly 21, 2015

另外一类常用的模板标签是通过渲染 其他 模板显示数据的。 比如说,Django的后台管理界面,它使用了自定义的模板标签来显示新增/编辑表单页面下部的按钮。 那些按钮看起来总是一样的,但是链接却随着所编辑的对象的不同而改变。 这就是一个使用小模板很好的例子,这些小模板就是当前对象的详细信息。

这些排序标签被称为 包含标签 。如何写包含标签最好通过举例来说明。 让我们来写一个能够产生指定作者对象的书籍清单的标签。 我们将这样利用标签:

{% books_for_author author %}

结果将会像下面这样:

<ul>
  <li>The Cat In The Hat</li>
  <li>Hop On Pop</li>
  <li>Green Eggs And Ham</li>
</ul>

首先,我们定义一个函数,通过给定的参数生成一个字典形式的结果。 需要注意的是,我们只需要返回字典类型的结果就行了,不需要返回更复杂的东西。 这将被用来作为模板片段的内容:

def books_for_author(author):
  books = Book.objects.filter(authors__id=author.id)
  return {'books': books}

接下来,我们创建用于渲染标签输出的模板。 在我们的例子中,模板很简单:

<ul>
{% for book in books %}
  <li>{{ book.title }}</li>
{% endfor %}
</ul>

最后,我们通过对一个 Library 对象使用 inclusion_tag() 方法来创建并注册这个包含标签。

在我们的例子中,如果先前的模板在 polls/result_snippet.html 文件中,那么我们这样注册标签:

register.inclusion_tag('book_snippet.html')(books_for_author)

Python 2.4装饰器语法也能正常工作,所以我们可以这样写:

@register.inclusion_tag('book_snippet.html')
def books_for_author(author):
  # ...

有时候,你的包含标签需要访问父模板的context。 为了解决这个问题,Django为包含标签提供了一个 takes_context 选项。 如果你在创建模板标签时,指明了这个选项,这个标签就不需要参数,并且下面的Python函数会带一个参数: 就是当这个标签被调用时的模板context。

例如,你正在写一个包含标签,该标签包含有指向主页的 home_link 和 home_title 变量。 Python函数会像这样:

@register.inclusion_tag('link.html', takes_context=True)
def jump_link(context):
  return {
    'link': context['home_link'],
    'title': context['home_title'],
  }

(注意函数的第一个参数 必须 是 context 。)

模板 link.html 可能包含下面的东西:

Jump directly to <a href="{{ link }}">{{ title }}</a>.

然后您想使用自定义标签时,就可以加载它的库,然后不带参数地调用它,就像这样:

{% jump_link %}
Python 相关文章推荐
Python压缩和解压缩zip文件
Feb 14 Python
python获取当前日期和时间的方法
Apr 30 Python
python实现识别相似图片小结
Feb 22 Python
Pyspider中给爬虫伪造随机请求头的实例
May 07 Python
Django读取Mysql数据并显示在前端的实例
May 27 Python
python requests爬取高德地图数据的实例
Nov 10 Python
Django-Rest-Framework 权限管理源码浅析(小结)
Nov 12 Python
Python快速转换numpy数组中Nan和Inf的方法实例说明
Feb 21 Python
Python Collatz序列实现过程解析
Oct 12 Python
Python模拟登入的N种方式(建议收藏)
May 31 Python
基于python实现判断字符串是否数字算法
Jul 10 Python
python实现进度条的多种实现
Apr 29 Python
剖析Django中模版标签的解析与参数传递
Jul 21 #Python
Python简单调用MySQL存储过程并获得返回值的方法
Jul 20 #Python
在Django的上下文中设置变量的方法
Jul 20 #Python
在Django中编写模版节点及注册标签的方法
Jul 20 #Python
在Python的Django框架中编写编译函数
Jul 20 #Python
Python的Django框架中自定义模版标签的示例
Jul 20 #Python
详解在Python的Django框架中创建模板库的方法
Jul 20 #Python
You might like
PHP的substr_replace将指定两位置之间的字符替换为*号
2011/05/04 PHP
解析PHP缓存函数的使用说明
2013/05/10 PHP
PHP内核探索:变量存储与类型使用说明
2014/01/30 PHP
php+mysqli事务控制实现银行转账实例
2015/01/29 PHP
php 如何设置一个严格控制过期时间的session
2017/05/05 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
Ext javascript建立超链接,进行事件处理的实现方法
2009/03/22 Javascript
JavaScript学习笔记(一) js基本语法
2011/10/25 Javascript
js动态设置div的值下例子
2013/10/29 Javascript
javascript实现表格增删改操作实例详解
2015/05/15 Javascript
iscroll.js的上拉下拉刷新时无法回弹的解决方法
2016/02/18 Javascript
基于Vue过渡状态实例讲解
2017/09/14 Javascript
jQuery实现打开网页自动弹出遮罩层或点击弹出遮罩层功能示例
2017/10/19 jQuery
基于jquery实现五星好评
2017/11/18 jQuery
mpvue构建小程序的方法(步骤+地址)
2018/05/22 Javascript
在Node.js中将SVG图像转换为PNG,JPEG,TIFF,WEBP和HEIF格式的方法
2019/08/22 Javascript
详解Django中类视图使用装饰器的方式
2018/08/12 Python
python实现批量nii文件转换为png图像
2019/07/18 Python
python日志模块logbook使用方法
2019/09/19 Python
python 解决print数组/矩阵无法完整输出的问题
2020/02/19 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
关于css兼容性问题及一些常见问题汇总
2016/05/03 HTML / CSS
html5实现滑块功能之type=&quot;range&quot;属性
2020/02/18 HTML / CSS
保加利亚运动鞋购物网站:SneakerStudio.bg
2020/12/23 全球购物
波兰汽车配件网上商店:iParts.pl
2020/09/08 全球购物
室内设计专业个人的自我评价
2013/12/18 职场文书
个人自荐书
2013/12/20 职场文书
统计岗位职责
2014/02/21 职场文书
倡议书格式范文
2014/04/14 职场文书
巴西世界杯32强口号
2014/06/05 职场文书
升学宴学生答谢词
2015/01/05 职场文书
2015年大学学生会工作总结
2015/05/13 职场文书
感恩教师节主题班会
2015/08/12 职场文书
社会心理学学习心得体会
2016/01/22 职场文书
Python之基础函数案例详解
2021/08/30 Python
HTML基础详解(上)
2021/10/16 HTML / CSS