Вопрос

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

Есть ли способ сделать этот встроенный, как:

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

Или что-то подобное?

Это было полезно?

Решение

Нормальный встроенный в наличии Python, если работает:

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

Другие советы

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

Вы могли бы сделать это так:

<a href="#" 
% if c.is_friend is True:
class="friend"
% endif
>link</a>

ПРЕДУПРЕЖДЕНИЕ

Обратите внимание на {} внутри ${}!

Решение с тройным оператором, упомянутым Jochen, также правильно, но может привести к неожиданному поведению при сочетании с str.format().

Вам нужно избегать {} Внутри Мако ${}, потому что, по-видимому, Мако перестает разбирать выражение после нахождения первого }. Отказ Это означает, что вы не должны использовать, например:

  • ${'{}'.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+

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top