详解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中的filter和lambda函数的使用
Apr 07 Python
Python数据类型详解(一)字符串
May 08 Python
Python利用ORM控制MongoDB(MongoEngine)的步骤全纪录
Sep 13 Python
python+splinter自动刷新抢票功能
Sep 25 Python
Python设计模式之备忘录模式原理与用法详解
Jan 15 Python
python基于Selenium的web自动化框架
Jul 14 Python
pytorch 固定部分参数训练的方法
Aug 17 Python
Django后端发送小程序微信模板消息示例(服务通知)
Dec 17 Python
python2 对excel表格操作完整示例
Feb 23 Python
Django 实现 Websocket 广播、点对点发送消息的代码
Jun 03 Python
python能做哪方面的工作
Jun 15 Python
python中子类与父类的关系基础知识点
Feb 02 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仿qq空间或朋友圈发布动态、评论动态、回复评论、删除动态或评论的功能(上)
2017/05/26 PHP
PHP文件打开关闭及读写操作示例解析
2020/08/06 PHP
JS location几个方法小姐
2008/07/09 Javascript
springMVC结合AjaxForm上传文件
2016/07/12 Javascript
JavaScript与java语言有什么不同
2016/09/22 Javascript
深入理解jquery中extend的实现
2016/12/22 Javascript
windows下vue.js开发环境搭建教程
2017/03/20 Javascript
解决AjaxFileupload 上传时会出现连接重置的问题
2017/07/07 Javascript
Angular实现的简单定时器功能示例
2017/12/28 Javascript
layui 监听表格复选框选中值的方法
2018/08/15 Javascript
JavaScript封闭函数及常用内置对象示例
2019/05/13 Javascript
微信小程序收货地址API兼容低版本解决方法
2019/05/18 Javascript
在layui.use 中自定义 function 的正确方法
2019/09/16 Javascript
JS+html5实现异步上传图片显示上传文件进度条功能示例
2019/11/09 Javascript
原生js实现html手机端城市列表索引选择城市
2020/06/24 Javascript
Python ZipFile模块详解
2013/11/01 Python
详解Python的Django框架中的templates设置
2015/05/11 Python
Python守护线程用法实例
2017/06/23 Python
Python中的defaultdict与__missing__()使用介绍
2018/02/03 Python
python实现图片文件批量重命名
2020/03/23 Python
详解Django+uwsgi+Nginx上线最佳实战
2019/03/14 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
Pycharm使用之设置代码字体大小和颜色主题的教程
2019/07/12 Python
python获取栅格点和面值的实现
2020/03/10 Python
通俗讲解python 装饰器
2020/09/07 Python
python实现代码审查自动回复消息
2021/02/01 Python
无故旷工检讨书
2014/01/26 职场文书
迟到检讨书500字
2014/02/05 职场文书
危爆物品安全大检查大整治工作方案
2014/05/03 职场文书
电大奖学金获奖感言
2014/08/14 职场文书
县委党的群众路线教育实践活动工作情况报告
2014/10/25 职场文书
2015年保育员个人工作总结
2015/05/13 职场文书
2016年大学生就业指导课心得体会
2015/10/09 职场文书
月考总结与反思
2015/10/22 职场文书
2016年学校十一国庆节活动总结
2016/04/01 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL