Пользовательский тег шаблона Django, который принимает логический параметр - PullRequest
9 голосов
/ 29 декабря 2010

Согласно этой теме в списке django-developers, я не могу передать константу 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 Ответ

16 голосов
/ 29 декабря 2010

Я столкнулся с этой проблемой некоторое время назад и пришел к выводу, что использование 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',
}
...