一种比较普遍的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