接受布尔参数的 Django 自定义模板标签

Posted

技术标签:

【中文标题】接受布尔参数的 Django 自定义模板标签【英文标题】:Django custom template tag which accepts a boolean parameter 【发布时间】:2011-06-01 05:21:29 【问题描述】:

根据 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 %

【问题讨论】:

另见***.com/questions/4229327 【参考方案1】:

我前段时间遇到过这个问题,得出的结论是使用 1 和 0 是最简单的解决方案。

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

# projectname/appname/context_processors.py

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

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

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

【讨论】:

哦,这很酷。希望有人对我的问题提出建议:P 我可能也会坚持使用 1 和 0,但了解上下文处理器解决方案对将来会有帮助。谢谢!

以上是关于接受布尔参数的 Django 自定义模板标签的主要内容,如果未能解决你的问题,请参考以下文章

Django - 自定义模板标签传递关键字参数

如何将三个或多个参数传递给自定义模板标签过滤器 django?

django 第五课自定义模板过滤器与标签

django 的模板语言template ,自定义过滤器,自定义标签,模板继承

如何在自定义模板中使用 Django 的管理员布尔图标?

Django将多个参数传递给If语句中的自定义模板过滤器