Django自定义模板标记,它接受一个布尔参数

时间:2010-12-29 19:19:45

标签: python django django-templates

根据django-developers列表中的this thread,我不能将常量False作为参数传递给Django模板标记,因为它将被视为变量名而不是内置常量。

但是如果我想创建一个模板标签需要一个真/假参数,那么建议(在Python中)和调用(在模板中)该模板标签的方法是什么?

我可以简单地在模板中传递1或0并且它可以正常工作,但鉴于Django模板创作不应该需要计算机编程知识(例如1 == True,0 == False)模板编写者,我是想知道是否有更合适的方法来处理这种情况。

标签定义和用法示例:

@register.simple_tag
def some_tag(some_string, some_boolean = True):
    if some_boolean:
        return some_html()
    else
        return some_other_html()

<!-- Error!  False treated as variable name in Request Context -->
{% some_tag "foobar" False %}

<!-- Works OK, but is there a better option? -->
{% some_tag "foobar" 0 %}

1 个答案:

答案 0 :(得分:16)

我刚才遇到了这个问题,得出的结论是使用1和0是最简单的解决方案。

然而,一个想法可能是添加一个上下文处理器,使用相应的名称将TrueFalse添加到模板上下文中:

# projectname/appname/context_processors.py

def booleans():
    return {
        'True': True,
        'False': False,
    }

然后显然你需要在Django设置文件中添加该上下文处理器:

TEMPLATE_CONTEXT_PROCESSORS += {
    'projectname.appname.context_processors.booleans',
}