zoukankan      html  css  js  c++  java
  • Django----->inclusion_tag的使用

    一种比较普遍的tag类型是只是渲染其它模块显示下内容,这样的类型叫做Inclusion Tag。 常用的模板标签是通过渲染 其他 模板显示数据的。 比如说,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 %}
  • 相关阅读:
    HDU3336 Count the string —— KMP next数组
    CodeForces
    51Nod 1627 瞬间移动 —— 组合数学
    51Nod 1158 全是1的最大子矩阵 —— 预处理 + 暴力枚举 or 单调栈
    51Nod 1225 余数之和 —— 分区枚举
    51Nod 1084 矩阵取数问题 V2 —— 最小费用最大流 or 多线程DP
    51Nod 机器人走方格 V3 —— 卡特兰数、Lucas定理
    51Nod XOR key —— 区间最大异或值 可持久化字典树
    HDU4825 Xor Sum —— Trie树
    51Nod 1515 明辨是非 —— 并查集 + 启发式合并
  • 原文地址:https://www.cnblogs.com/yifugui/p/7805704.html
Copyright © 2011-2022 走看看