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

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

{% books_for_author author %}

结果将会像下面这样:

The Cat In The Hat

Hop On Pop

Green Eggs And Ham

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

def books_for_author(author):

books = Book.objects.filter(authors__id=author.id)

return {'books': books}

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

{% for book in books %}

{{ book.title }}

{% endfor %}

最后,我们通过对一个 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 {{ title }}.

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

{% jump_link %}

本条技术文章来源于互联网,如果无意侵犯您的权益请点击此处反馈版权投诉

本文系统来源:php中文网

python include_tag_详解Python的Django框架中inclusion_tag的使用相关推荐

  1. php中yii的controller,详解PHP的Yii框架中的Controller控制器,yiicontroller

    详解PHP的Yii框架中的Controller控制器,yiicontroller 控制器是 MVC 模式中的一部分, 是继承yii\base\Controller类的对象,负责处理请求和生成响应. 具 ...

  2. python join_详解Python中的join()函数的用法

    函数:string.join() Python中有join()和os.path.join()两个函数,具体作用如下: join(): 连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符) ...

  3. python getattr_详解 Python 的二元算术运算,为什么说减法只是语法糖?

    原题 | Unravelling binary arithmetic operations in Python 作者 | Brett Cannon 译者 | 豌豆花下猫("Python猫&q ...

  4. python多线程详解 Python 垃圾回收机制

    文章目录 python多线程详解 一.线程介绍 什么是线程 为什么要使用多线程 总结起来,使用多线程编程具有如下几个优点: 二.线程实现 自定义线程 守护线程 主线程等待子线程结束 多线程共享全局变量 ...

  5. python expandtabs_详解Python中expandtabs()方法的使用

    详解Python中expandtabs()方法的使用 expandtabs()方法返回制表符,即该字符串的一个副本. '\t'已经使用的空间,可选择使用给定的tabsize(默认8)扩展. 语法 以下 ...

  6. python讲解-详解python中@的用法

    python中@的用法 @是一个装饰器,针对函数,起调用传参的作用. 有修饰和被修饰的区别,"@function"作为一个装饰器,用来修饰紧跟着的函数(可以是另一个装饰器,也可以是 ...

  7. python括号详解,Python如何省略括号方法详解

    Python如何省略括号方法详解 在Python语言中最常见的括号有三种,分别是:小括号().中括号[].花括号{}:其作用也不相同,分别用来代表不同的Python基本内置数据类型. 1.Python ...

  8. python日期选择框_Python的Django框架中设置日期和字段可选的方法

    设置字段可选 在摆弄了一会之后,你或许会发现管理工具有个限制:编辑表单需要你填写每一个字段,然而在有些情况下,你想要某些字段是可选的. 举个例子,我们想要Author模块中的email字段成为可选,即 ...

  9. python enumerate_详解 Python 的 enumerate 函数

    Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发. 你应该在何时何地,如何使用内置的 enumerate() 函数来写出更加简洁.更加具有 Python 范儿 ...

最新文章

  1. 但并不从包含函数声明的接口派生_C++的虚函数和纯虚函数
  2. Vector和ArrayList区别
  3. CSS的历史与工作原理
  4. C++:类模板与模板类
  5. 读大道至简第四章有感
  6. 设置y轴刻度_Origin中如何设置坐标轴单位长度相等? axisisometric
  7. Keil μVision4软件简介
  8. 数据结构1800题-错题集-第四章
  9. 三角波的傅里叶变换对_傅里叶变换(二) 从傅里叶级数到傅里叶变换
  10. C语言 单引号和双引号
  11. weak_auth 小宁写了一个登陆验证页面,随手就设了一个密码。
  12. jsp页面转为html5,eclipse 设置jsp页面为HTML5
  13. Uva 167 The Sultan's Successors(dfs)
  14. 杭州到温州老家自驾路线优化与整理
  15. HTTP详解(请求方式)
  16. ASCII,ISO8859-1,GBK,GB18030,Unicode,UTF-8详解
  17. Squid ----反向代理模式
  18. vue百度地图 驾车路线修改路径颜色,每条路径颜色不一样
  19. 基于Web的学生成绩管理系统
  20. 安装计算机一级出现appcrash,appcrash,详细教您运行程序出现appcrash错误该如何解决...

热门文章

  1. 两位MIT学霸,25岁退学,40岁完成800亿IPO!
  2. 最新!TUI世界大学排名(2021)发布:清华位居全球前20名!
  3. 一批高校调整国庆假期!教育部回应,大学生国庆假期能否离校?
  4. 脑洞大开!Adobe等新研究把「自拍」变「他拍」,魔幻修图效果感人
  5. 3.2亿人都在刷抖音,而优秀的人在看这几个公众号!
  6. JUC AQS ReentrantLock源码分析
  7. 代替以前的F5,Ctrl+r!
  8. 利用python爬取IP地址归属地等信息!
  9. SLAM和三维重建有什么区别?
  10. 对象检测和图像分割有什么区别?