2010-12-29 2 views
9

Согласно this thread в списке разработчиков django, я не могу передать константу False в качестве параметра тега шаблона Django, потому что он будет рассматриваться как имя переменной, а не встроенный постоянная.Django custom template tag, который принимает логический параметр

Но если я хочу создать тег шаблона, требуется параметр true/false, каков рекомендуемый способ создания (в Python) и вызвать (в шаблоне) тег шаблона?

Я мог бы просто передать 1 или 0 внутри шаблона, и он будет работать нормально, но при условии, что для создания шаблона Django не требуется знание компьютерного программирования (например, 1 == True, 0 == False) авторов шаблонов, I было интересно, есть ли более подходящий способ справиться с этим делом.

Пример определения тегов и использования:

@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 %} 
+0

см. Также http://stackoverflow.com/questions/4229327 – mpen

ответ

15

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

О, это круто. Хотелось бы, чтобы кто-то предположил, что на мой вопрос: P – mpen

+1

Я, вероятно, буду придерживаться 1 и 0 тоже, но знание о решении контекстного процессора будет полезно в будущем. благодаря! –

Смежные вопросы