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

但是,如果我想创建一个需要使用true/false参数的模板标记,那么(在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是最简单的解决方案。

但是,可能的想法是添加一个上下文处理器,该处理器使用各自的名称将TrueFalse添加到模板上下文中:

# projectname/appname/context_processors.py

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

然后显然您需要在Django设置文件中添加该上下文处理器:
TEMPLATE_CONTEXT_PROCESSORS += {
    'projectname.appname.context_processors.booleans',
}

关于python - 接受 bool 参数的Django自定义模板标签,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/4557114/

10-11 22:04
查看更多