Подтвердить что ты не робот

Мако шаблоны inline if statement

У меня есть шаблонная переменная 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>

Или что-то в этом роде?

4b9b3361

Ответ 1

Python normal inline if works:

<a href="#" ${'class="friend"' if c.is_friend else ''}>link</a>

Ответ 2

Простое решение

Вы можете сделать это следующим образом:

<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 +