我正在编写一个自定义的模板标签'firstnotnone',类似于Django的'firstof‘模板标签。如何使用可变长度参数?下面的代码结果是TemplateSyntaxError,firstnotnone接受1个参数。
模板:
{% load library %}
{% firstnotnone 'a' 'b' 'c' %}自定义模板标签库:
@register.simple_tag
def firstnotnone(*args):
print args
for arg in args:
if arg is not None:
return arg发布于 2010-08-10 21:29:22
自定义模板标签:
from django.template import Library, Node, TemplateSyntaxError
from django.utils.encoding import smart_unicode
register = Library()
class FirstNotNoneNode(Node):
def __init__(self, vars):
self.vars = vars
def render(self, context):
for var in self.vars:
value = var.resolve(context, True)
if value is not None:
return smart_unicode(value)
return u''
def firstnotnone(parser,token):
"""
Outputs the first variable passed that is not None
"""
bits = token.split_contents()[1:]
if len(bits) < 1:
raise TemplateSyntaxError("'firstnotnone' statement requires at least one argument")
return FirstNotNoneNode([parser.compile_filter(bit) for bit in bits])
firstnotnone = register.tag(firstnotnone)发布于 2010-08-10 21:21:37
firstof标记不是通过simple_tag装饰器实现的-它使用template.Node子类和单独标记函数的长形式。你可以在django.template.defaulttags中看到代码--为了你的目的修改它应该是相当简单的。
https://stackoverflow.com/questions/3449265
复制相似问题