diango 创建自定义 tag 时有些要求,大概的几个步骤如下:
1),在 app/templatetags 中创建自定义标签脚本
2),创建模版文件(非必须)
3),在视图中加载自定义标签,并使用
1、简单标签
这类标签只是简单的输出某一个结果,步骤如下:
第一步、在 app/templatetags 中创建文件 tag_demo.py,代码如下:
from django import template
register = template.Library()
@register.simple_tag
def total_posts():
return 'total:101 个'
注:上面两行是 diango 规定必须的代码,详细请参见官方 api。
目录结构大概是这样的:
第二步,在视图中引用
在需要使用的图片中加入如下行代码:
{% load tag_demo %}
{% total_posts %}
第一行是加载自定义标签脚本,第二行是使用标签脚本中的自定义标签
注:一个算定义标签脚本中,可以包括多个自定义标签
2、带参数标签
修改tag_demo.py,加入如下代码:
@register.simple_tag
def total_posts2(v):
return 'total: '+ v +' 个'
修改视图文件,加载并引用:
{% load tag_demo %}
{% total_posts2 "1111" %}
如果是两个参数形如下面示例:
@register.simple_tag
def total_posts2(v, v2):
return 'total: '+ v + ',' + v2 +' 个'
...............
{% load tag_demo %}
{% total_posts2 "1111" "222" %}
3、内含标签
内含标签可以被其他模板进行渲染,然后将渲染结果输出。继续上一示例进行如下操作:
修改标签脚本,加入如下代码:
@register.inclusion_tag('total_posts3_part.html')
def total_posts3():
a = ['first','second','third']
return {'choices': a}
然后在“templates”目录中新建文件“total_posts3_part.html”,代码如下:
<ul>
{% for choice in choices %}
<li> {{ choice }} </li>
{% endfor %}
</ul>
最后在需要引用的视图中加入如下两行代码:
{% load tag_demo %}
{% total_posts3 %}
注:当需要传入参数时,与上一示例相似。
4、分配标签
分配标签类似于简单标签,但并不会输出结果,可以使用 as 关键字将结果赋给一个参数。
修改 tag_demo.py 加入如下代码:
@register.assignment_tag
def total_posts4(total):
return 'total:' + total + ' 个'
在需要使用的视图中加入如何代码:
{% load tag_demo %}
{% total_posts4 "777" as str %}
{{ str }}