Нет, это невозможно. Шаблоны не предназначены для включения сложной логики, они являются частью уровня представления. Вы должны подготовить все свои данные в представлении и передать их уже обработанному шаблону.
Итак, в вашем случае вам, вероятно, следует переместить свою логику в представление, что приведет к чему-то вроде этих строк:
from datetime import datetime
if datetime.strptime(report['date'], '%m/%d/%Y') > datetime.today():
report["status"] = "due"
else:
if report["result"]:
report["status"] = "pending_check"
else:
report["status"] = "missing_result"
а затем в шаблоне проверьте флаг, например:
%if report["status"] == "due":
<span class="ui-icon ui-icon-circle-close"></span>
%elif report["status"] == "pending_check":
<span class="ui-icon ui-icon-circle-check"></span>
%elif report["status"] == "missing_result":
<span class="ui-icon ui-icon-alert"></span>
%end
Я специально не использовал close
, check
и alert
в качестве значений report["status"]
, потому что лучше всего было бы отделить данные от представления и, следовательно, не назначать имена классов HTML в представлении, а воздействовать на обработанные данные в шаблоне, как я сделал в прикрепленный фрагмент.
Затем, если вы решите изменить значки, вы сделаете это только в своем шаблоне, что лучше, чем изменение представления в представлении (и, например, необходимость перезапустить веб-сервер, чтобы они вступили в силу).
ОБНОВЛЕНИЕ (апрель 2016 г.): Видимо, теперь возможно или стало возможным, раз уж я ответил, импортировать модули в шаблоны Bottle, но это все равно плохая идея :)
person
kgr
schedule
14.03.2013