接受布尔参数的Django自定义模板标签
根据这个讨论帖,我不能把常量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 个回答
17
我之前遇到过这个问题,最后得出的结论是使用1和0是最简单的解决办法。
不过,有个想法是可以添加一个上下文处理器,这样就可以在模板上下文中用相应的名字添加True
和False
:
# projectname/appname/context_processors.py
def booleans():
return {
'True': True,
'False': False,
}
然后显然你需要在你的Django设置文件中添加这个上下文处理器:
TEMPLATE_CONTEXT_PROCESSORS += {
'projectname.appname.context_processors.booleans',
}