Пирамида Хамелеон Таль: условие "не"
Я пытаюсь отобразить условный текст в шаблоне 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>