17

我有一个模板变量 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>

或类似的东西?

4

2 回答 2

34

Python的正常内联如果有效:

<a href="#" ${'class="friend"' if c.is_friend else ''}>link</a>
于 2010-05-15T22:00:36.847 回答
4

更通用的解决方案

如果您需要提出一个更通用的解决方案,假设您需要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+


警告(对于旧版本)

注意{}里面${}

Jochen 提到的使用三元运算符的解决方案也是正确的,但在与 结合时会导致意外行为str.format()

您需要避免{}在 Mako's 内部${},因为显然 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)}
于 2017-12-07T11:30:42.623 回答