Пирамида Хамелеон Таль: условие "не"

Я пытаюсь отобразить условный текст в шаблоне Pyramid Chameleon. По сути, проверка, является ли ключ словаря 'maxed_out_alerts' пустым (ложным) или содержит строку "да".

<p tal:condition="not:maxed_out_alerts"><h3>Maxed Out.</h3></p>
<p tal:condition="maxed_out_alerts"><h3>Not Maxed Out</h3></p>

Когда 'maxed_out_alerts' является пустой строкой, 'Maxed Out' отображается только (правильно). Однако, если maxed_out_alerts содержит строку yes, оба параметра "Maxed Out" и "Not Maxed Out" отображаются (неправильно).

Кажется, что НЕ всегда оценивается к истинному состоянию. Должны отображаться те или иные сообщения, а не оба. Что я делаю неправильно? Спасибо

2 ответа

Решение

Для условных выражений TAL в Python вы можете сказать python: а затем использовать синтаксис Python условно

<p tal:condition="python:len(maxed_out_alerts) > 0"><h3>Maxed Out.</h3></p>

Это может помочь, если вы сохраните логическое состояние в логической переменной. Храня эту информацию в строке, вы сталкиваетесь с такими проблемами, с которыми сталкиваетесь сейчас. Вот для чего созданы встроенные типы Python - используйте их.

Как разработчик пирамиды, я бы посоветовал переместить логику для оценки текущего значения maxed_out_alerts в строку в метод представления и передать вычисленную строку в словаре в средство визуализации / шаблон. Таким образом, вы даже можете создавать тесты для логики представления - любой учебник по пирамиде, простой или продвинутый, покажет вам, как это сделать.

Хорошее начало для любой простой логики - представьте, что логика усложняется, или вам даже нужно перевести текст для шаблона.

@view_config(name="yourname", renderer='templates/yourtemplate.pt')
def myview(request):
    """
    #get boolean state from model
    #could be that you want to have it the other way round
    #or do it by using python ternary operator - a if test else b 
    if model['maxed_out_alerts'] == True:
        maxed_out_alerts = 'Maxed Out'
    else:
        maxed_out_alerts = 'Not Maxed Out'


    return dict(maxed_out_alerts = maxed_out_alerts)

В вашем шаблоне

<h3 tal:content="maxed_out_alerts">text for maxed out alerts</h3>

или же

<h3>${maxed_out_alerts}</h3>
Другие вопросы по тегам