Backslash

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
pixewakb
User
Beiträge: 1413
Registriert: Sonntag 24. April 2011, 19:43

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?
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

HTML-Code solltest du niemals so zusammenflicken, dafür gibt es Template-Engines. Zum Beispiel Jinja2 oder Genshi.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

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.
Das Leben ist wie ein Tennisball.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

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

Code: Alles auswählen

r'foo\bar'
, aber HTML hat davon keine ...

Wenn du wirklich ganze Seiten erzeugst, halte dich an derdons Vorschlag, Gruende gibts bei EyDu.
Benutzeravatar
pixewakb
User
Beiträge: 1413
Registriert: Sonntag 24. April 2011, 19:43

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

Code: Alles auswählen

<[...]>
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...
Benutzeravatar
pixewakb
User
Beiträge: 1413
Registriert: Sonntag 24. April 2011, 19:43

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.
Benutzeravatar
sparrow
User
Beiträge: 4535
Registriert: Freitag 17. April 2009, 10:28

Ich würde sagen: Problem gelöst bis Harry</a> Peters Kontakt sucht.
Benutzeravatar
/me
User
Beiträge: 3561
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

sparrow hat geschrieben:Ich würde sagen: Problem gelöst bis Harry</a> Peters Kontakt sucht.
Ich sag nur: Bobby Tables!
Antworten