Seite 1 von 1

"%(foo)s" % locals()

Verfasst: Dienstag 19. Januar 2010, 13:47
von jens
Ich wollte gerade mal anschauen, wie das i18n in Django so funktioniert. Dabei bin ich auf einen Fehler gestoßen, das man string operationen nicht mit "%s" machen soll/kann, wenn mehrere in einem String vorkommen...

Nun hab ich öfters schon einmal das gesehen:

Code: Alles auswählen

x = "bla %(foo)s und %(bar)s" % locals()
Ist natürlich kompakter als das:

Code: Alles auswählen

x = "bla %(foo)s und %(bar)s" % {"foo": foo, "bar": bar}
Ich sehe da zwei Probleme:
1. Wenn bei locals was falsch geschrieben ist, kann man das in einem Editor nicht sehen.
2. Evtl. kann man Dinge Sichtbar machen, die normalerweise nicht zu sehen sein sollen.

Was haltet ihr davon?

Verfasst: Dienstag 19. Januar 2010, 14:54
von Michael Schneider
Hallo Jens,

was für einen Fehler meinst Du? Was ist verkehrt/problematisch an

Code: Alles auswählen

x = "bla %s und %s" % (foo, bar)
Die Formatierungsvariante

Code: Alles auswählen

"%(key)s" % dict
wird AFAIK nur verwendet, wenn man schon ein Dictionary, zumeist einen Datensatz, gegeben hat und gezielt auf dessen Elemente zugreifen möchte - oder wenn man den Formatierungsstring dynamisch erstellt, z.B. mit individuell gewählten Attributen.

Gruß,
Michel

Verfasst: Dienstag 19. Januar 2010, 14:57
von jens
Michael Schneider hat geschrieben:was für einen Fehler meinst Du? Was ist verkehrt/problematisch an

Code: Alles auswählen

x = "bla %s und %s" % (foo, bar)
Grundsätzlich ist da nix verkehrt dran.

Aber django weigert sich solche Strings als gettext zu verwenden. Es geht darum, das man bei der Übersetzung evtl. die Reihenfolge ändern muss und das geht nur mit der dict Variante...