string.Template Frage, zwei Schreibweisen, nur eine Funkt.

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
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

Hallo Leute,

Hier mal das Beispiel das läuft:

Code: Alles auswählen

def funktion(bild_name):
    bild_link = "<img src=\"%s\" alt=\"bild\" /> \n" %(bild_name)
    print(bild_link)


test_bild = "bild.jpg"
funktion(test_bild)
Kommt raus:

Code: Alles auswählen

<img src="bild.jpg" alt="Bild" />
Wenn ich es aber so schreibe:

Code: Alles auswählen

def funktion(bild_name):
    bild_link = "<img src=\"%(bild_name)s\" alt=\"Bild\" /> \n" 
    print(bild_link)


test_bild = "bild.jpg"
funktion(test_bild)
Kommt nur das raus, obwohl ich diese Schreibweise natürlich auch einsetze, wenn auch mit weniger BackSlashes.

Code: Alles auswählen

<img src="%(bild_name)s" alt="Bild" /> 
Wie kann ich den die letzte Schreibweise richtig einsetzen?
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
Sirius3
User
Beiträge: 18335
Registriert: Sonntag 21. Oktober 2012, 17:20

@Sinnentlehrt: Du formatierst in Deinem zweiten Beispiel den String ja gar nicht:

Code: Alles auswählen

print '<img src="%(bild_name)s" alt="Bild" /> \n' % {'bild_name':'test.jpg'}
wobei Du noch sicherstellen mußt, dass in Deinem Bildnamen Sonderzeichen richtig codiert werden.
Benutzeravatar
HarteWare
User
Beiträge: 69
Registriert: Samstag 23. Februar 2013, 21:16
Wohnort: localhost

Wieso nicht mit format?
BlackJack

Wieso nicht mit einem Template-System das für HTML gedacht ist. :roll:

Edit: Ich vermisse auch irgendwie die im Betreff angekündigte Frage zu `string.Template`‽
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

+1 fuer die Templating-Engine

Trotzdem: Wenn du einfache Anfuehrungszeichen statt doppelten als Stringbegrenzer nutzt, musst du letztere innerhalb des Strings nicht mehr escapen.
Sinnentlehrt
User
Beiträge: 67
Registriert: Mittwoch 30. Januar 2013, 22:32

Jetzt habe ich es wieder gefunden. Es geht nämlich so:

Code: Alles auswählen

def funktion(bild_name):
    var = "<img src=\"%(bild_name)s\" alt=\"Bild\" /> \n" %locals()
    print var


test_bild = "bild.jpg"
funktion(test_bild)
Und dann passt es auch.

Code: Alles auswählen

<img src="bild.jpg" alt="Bild" />
Hatte das '%locals()' nicht mehr auf dem Schirm. Und was ich jetzt auch gerade erst begriffen habe.
locals beinhaltet ja interessantes.

Code: Alles auswählen

{'var': '<img src="bild.jpg" alt="Bild" /> \n', 'bild_name': 'bild.jpg'}
@cofi, danke für den Tipp.
@BlackJack, das HTML das ich einsetze ist schon geschrieben. Python braucht es nur noch zu kopieren. Und ich werde mich noch damit befassen, aber Jinja hat im Moment nicht die höchste Priorität.
@sirius3, ja dann meinten wir beide wohl das gleiche, und danke für Erinnerung an das Sonderzeichen Problem, hatte ich schon verdrängt aber baue ich wohl erst am Ende ein.
Du weißt das du vergessen hast einzukaufen, wenn du dich morgens mit Geschirrspülmittel duscht.
Antworten