一种比较普遍的tag类型是只是渲染其它模块显示下内容,这样的类型叫做Inclusion Tag。
例如,实现以下tag:
{% books_for_author author %}
渲染结果为:
<
ul>
< li>The Cat In The Hat</ li>
< li>Hop On Pop</ li>
< li>Green Eggs And Ham</ li>
</ 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}
books = Book.objects. filter(authors__id=author. id)
return {'books': books}
- 创建另一个模板文件book_snippet.html
<
ul>
{% for book in books %}
< li>{{ book. title }}</ li>
{% endfor %}
</ ul>
{% for book in books %}
< li>{{ book. title }}</ li>
{% endfor %}
</ ul>
- 注册tag
register.inclusion_tag('book_snippet.html')(books_for_author)
有些你的模板可以使用父模板的context内容,Django提供一个takes_context参数来实现,
使用之后,tag不能再带参数,
@register.inclusion_tag('link.html', takes_context=
True)
def jump_link(context):
return {
'link': context['home_link'],
'title': context['home_title'],
}
模板文件link.html为
def jump_link(context):
return {
'link': context['home_link'],
'title': context['home_title'],
}
Jump directly to <a href="{{ link }}">{{ title }}</a>.
使用方法:
{% jump_link %}
转自: http://www.cnblogs.com/btchenguang/archive/2012/09/05/2672364.html