Ответ 1
Python normal inline if works:
<a href="#" ${'class="friend"' if c.is_friend else ''}>link</a>
У меня есть шаблонная переменная c.is_friend, которую я хотел бы использовать, чтобы определить, применяется ли класс. Например:
if c.is_friend is True
<a href="#" class="friend">link</a>
if c.is_friend is False
<a href="#">link</a>
Есть ли способ сделать это inline, например:
<a href="#" ${if c.is_friend is True}class="friend"{/if}>link</a>
Или что-то в этом роде?
Python normal inline if works:
<a href="#" ${'class="friend"' if c.is_friend else ''}>link</a>
Вы можете сделать это следующим образом:
<a href="#"
% if c.is_friend is True:
class="friend"
% endif
>link</a>
{}
внутри ${}
!Решение с тернарным оператором, упомянутое Йохеном, также корректно, но может привести к неожиданному поведению при объединении с str.format()
.
Вам нужно избегать {}
внутри Mako ${}
, потому что, по-видимому, Мако перестает анализировать выражение после поиска первого }
. Это означает, что вы не должны использовать, например:
${'{}'.format(a_str)}
. Вместо этого используйте ${'%s' % a_str}
.${'%(first)s %(second)s' % {'first': a_str1, 'second': a_str2}}
. Вместо этого используйте
${'%(first)s %(second)s' % dict(first=a_str1, second=a_str2)}
Так, например, если вам нужно придумать более общее решение, скажем, вам нужно поместить переменную с именем relationship
внутри тега класса вместо статической строки, вы можете сделать это, как это, со старой строкой форматирование:
<a href="#" ${'class="%s"' % relationship if c.has_relation is True else ''}>link</a>
или без форматирования строки:
<a href="#"
% if c.has_relation is True:
class="${relationship}"
% endif
>link</a>
Это должно работать для Python 2.7+ и 3 +