Frage

habe ich eine Template-Variable, c.is_friend, dass ich verwenden möchte, um zu bestimmen, ob eine Klasse angewendet wird. Zum Beispiel:

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

if c.is_friend is False
<a href="#">link</a>

Gibt es eine Möglichkeit, diese Inline zu tun, wie:

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

oder so etwas?

War es hilfreich?

Lösung

Pythons normalen Inline wenn Werke:

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

Andere Tipps

einfache Lösung

Man könnte es wie folgt tun:

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

ACHTUNG

Achten Sie auf die {} innen ${}!

Die Lösung mit dem ternären Operator von Jochen erwähnt ist auch richtig, aber kann zu unerwartetem Verhalten führen, wenn sie mit str.format() kombiniert werden.

Sie müssen {} innerhalb Makos ${} zu vermeiden, weil offenbar nicht mehr Mako die Ausdrucksanalyse nach dem ersten } zu finden. Das heißt, Sie nicht zum Beispiel verwendet werden soll:

  • ${'{}'.format(a_str)}. Statt Verwendung ${'%s' % a_str}.
  • ${'%(first)s %(second)s' % {'first': a_str1, 'second': a_str2}}. Verwenden Sie stattdessen
    ${'%(first)s %(second)s' % dict(first=a_str1, second=a_str2)}

Allgemein Lösung

So zum Beispiel, wenn Sie mit einer allgemeineren Lösung zu kommen brauchen, lassen Sie uns sagen, dass Sie eine Variable setzen relationship innerhalb der Klasse-Tag statt einer statischen Zeichenfolge genannt, können Sie es so mit der alten Zeichenfolge tun könnte Formatierung:

<a href="#" ${'class="%s"' % relationship if c.has_relation is True else ''}>link</a>

oder ohne Zeichenfolge Formatierung:

<a href="#" 
% if c.has_relation is True:
class="${relationship}"
% endif
>link</a>

Dies sollte für Python arbeitet 2.7+ und 3 +

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top