1 简介
Django-Classy-Tags是一个定义优雅模板标签的应用,扩展Django自带的模板标签定义系统。
2 一个简单示例:
这是一个基本的没有参数的示例:
from classytags.core import Tag
from django import template
register = template.Library()
class HelloWorld(Tag):
name = 'hello_world'
def render_tag(self,context):
return 'hello world'
register.tag(HelloWorld)
现在我们来解释这个示例:
(1)要定义一个模板标签变是子类化classytags.core.Tag。在这个子类必须给出name属性和render_tag(self,context)方法,name指出了标签名称。render_tag()方法在渲染模板时使用,这个方法总是返回一个字符串。
(2)如常规django自定义模板标签一样,注册这个模板标签。
3 一个带选项的模板标签:
from classytags.core import Tag,Options
from classytags,arguments import Argument
from django import template
register = template.Library()
class Hello(Tag):
name = 'hello'
options = Options(
Argument('name'),
'as',
Argument('varname',required=false,resolave=False))
def render_tag(self,context,name,varname):
output = "hello %s' %name
if varname:
context[varname] = output
return ''
else:
return output
register.tag(hello)
在模板中,我们可能使用{% hello 'world' %}使用这个标签,它会输出‘hello world';如果在模板中使用了{% hello 'world' as 'myvar' %}将会什么也不输出,但在模板中使用{{ myvar }}时,会输出‘hello world'
4 定义一个块模板标签
from classytags.core import Tag,Options
from classtags.arguments import Argument
from django import template
register = template.Library()
class With(Tag):
name = 'with'
options = Options(
Argument('variable'),
'as',
Argument('varname',resolve=False),
blocks=[('endwith','nodelist')]
)
def render_tag(self,context,variable,varname,nodelist):
context.push()
context[varname] = variable
output = nodelist.render(context)
context.pop()
return output
register.tag(with)