Seite 1 von 1
Backslash
Verfasst: Mittwoch 15. August 2012, 18:59
von pixewakb
Ich habe ein kleines Problem mit dem Backslash.
In meinem Quellcode wird gerade eine HTML-Seite erzeugt. Dabei wird etwa folgendes gebastelt:
Code: Alles auswählen
link = '<a href="mailto:' + email + '">' + name + '</a>'
Das läuft auch alles ganz prima, aber auf der fertigen Seite wird mir hinter name dann '<>' angezeigt, d. h. Python interpretiert das /a als Befehl.
Eine damit zusammenhängende Frage: Bei Verzeichnispfaden bekomme ich auch häufig /..., da gibt es dann auch Probleme, so dass ich mir mit // aushelfe.
Wie kann man die beiden Probleme lösen?
Re: Backslash
Verfasst: Mittwoch 15. August 2012, 19:09
von derdon
HTML-Code solltest du niemals so zusammenflicken, dafür gibt es Template-Engines. Zum Beispiel Jinja2 oder Genshi.
Re: Backslash
Verfasst: Mittwoch 15. August 2012, 19:12
von EyDu
In deinem Beitrag kommt überhaupt kein Backslash vor

Das Problem ist eher, dass du HTML per Hand zusammenschraubst und keine dafür vorgesehene Template-Engine verwendest. Dein Ansatz bringt gleich mehrere Nachteile mit sich: Logik und Anzeige werden vermischt, der Code wird unglaublich unübersichtlich und früher oder später wirst du dir selber in den Fuß schießen, da als Name vielleicht doch mal ein "<" oder ">" vorkommt, was dir natürlich dein HTML zerlegt.
Wenn du in Pfaden einen Slash oder Backslash verwendest, dann solltest du das ändern. Pfade baust du am besten im os.path.join zusammen, dann ist deren Konstruktion vom OS unabhängig und du sparst dir das maskieren von Zeichen.
Re: Backslash
Verfasst: Mittwoch 15. August 2012, 19:17
von cofi
Code: Alles auswählen
In [1]: email = 'foo@bar.net'
In [2]: name = 'Foo Bar'
In [3]: link = '<a href="mailto:' + email + '">' + name + '</a>'
In [4]: link
Out[4]: '<a href="mailto:foo@bar.net">Foo Bar</a>'
Nein, dein Problem ist ganz klar woanders. Kann es sein, dass du `link` ueberschreibst?
Python interpretiert nicht den gezeigten _Slash_ anders in Stringliteralen, sondern den _Backslash_ `\` anders.
Beim Backslash hilft `\\` in der Tat, aber auch raw strings
, aber HTML hat davon keine ...
Wenn du wirklich ganze Seiten erzeugst, halte dich an derdons Vorschlag, Gruende gibts bei EyDu.
Re: Backslash
Verfasst: Mittwoch 15. August 2012, 20:52
von pixewakb
Momentan arbeite ich an einer sehr schnellen Lösung für ein einfaches Szenario.
Ich habe zumindest den Fehler in der Shell isolieren können
Code: Alles auswählen
user_input = {'kontakt':'Herr Nachname',
'kontakt_email':'vorname.nachname@anbieter.com'}
if user_input['kontakt_email'] != "":
user_input['kontakt'] = '<a href="mailto:' + user_input['kontakt_email'] + '">' + user_input['kontakt'] + '<\a>'
print(user_input['kontakt'])
Liefert in der Shell
In meiner Shell wird mir da ein Punkt angezeigt. Problem bei der HTML-Seite ist, dass da kaum HTML enthalten ist und nur ganz wenig damit gemacht wird. Habe die Sorge, dass eine Bibliothek oder ein Framework da mehr Material ist, als ich eigentlich brauche...
Re: Backslash
Verfasst: Mittwoch 15. August 2012, 21:00
von pixewakb
Antworten: OK.
Ich habe immer \a statt /a verwendet. Eigene Dämlichkeit.
Ich schaue mir dieser Tage mal die Templates an und auch das mit os und join...
Scheinbar gelöst.
Re: Backslash
Verfasst: Mittwoch 15. August 2012, 21:41
von sparrow
Ich würde sagen: Problem gelöst bis Harry</a> Peters Kontakt sucht.
Re: Backslash
Verfasst: Mittwoch 15. August 2012, 23:08
von /me
sparrow hat geschrieben:Ich würde sagen: Problem gelöst bis Harry</a> Peters Kontakt sucht.
Ich sag nur:
Bobby Tables!