"%(foo)s" % locals()

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Michael Schneider
User
Beiträge: 569
Registriert: Samstag 8. April 2006, 12:31
Wohnort: Brandenburg

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
Diese Nachricht zersört sich in 5 Sekunden selbst ...
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten