Seite 1 von 1

bottle -> Probleme mit dem Einbinden von Resourcen

Verfasst: Montag 16. August 2010, 11:18
von powered_by_coffee
Moin Moin!
Wie muss ich den Pfad behandeln, wenn ich unter Bottle in meinem Template z.B. ein Bild einbinden möchte.
Hab versucht ein Bild einzubinden aber in der Preview nachher findet er das Bild nicht und gibt logischerweise den Alt=""-Text aus.

Das Bild liegt in meinem Templateordner.
Habs einmal mit
<img src="captcha.JPG" alt="Are you human?" />
und mit
<img src="templates/captcha.JPG" alt="Are you human?" />
versucht. Beides leider vergebens.

Oder mach ich gerade ein riesigen Denkfehler? :)

Ps.
Absolute Pfade (z.B. "http://www.google.de/intl/en_com/images/srpr/logo1w.png") funktionieren.

Re: bottle -> Probleme mit dem Einbinden von Resourcen

Verfasst: Montag 16. August 2010, 12:11
von ms4py
Du musst das Bild natürlich entweder über Bottle oder direkt mittels dem Webserver bereitstellen, sonst funktioniert das natürlich nicht. Schau dir mal den Abschnitt zu "static files" in der Bottle-Doku genauer an.

Edit: http://bottle.paws.de/docs/dev/tutorial ... atic-files

Re: bottle -> Probleme mit dem Einbinden von Resourcen

Verfasst: Montag 16. August 2010, 13:16
von powered_by_coffee
....sonst funktioniert das natürlich nicht.
Das kann ich nicht zu 100% nachvollziehen.
Wenn ich ein Bild im Projektordner habe, muss ich das doch irgendwie über ein relativen Pfad ansprechen können?

Mfg p_b_c

Re: bottle -> Probleme mit dem Einbinden von Resourcen

Verfasst: Montag 16. August 2010, 13:44
von noisefloor
Hallo,

wie läuft deine Applikation denn? Eingebauter Server, mod_wsgi...?

Gruß, noisefloor

Re: bottle -> Probleme mit dem Einbinden von Resourcen

Verfasst: Montag 16. August 2010, 13:55
von powered_by_coffee
Derzeit noch über den "Server", den Bottle.py mitliefert.
Also localhost.

Re: bottle -> Probleme mit dem Einbinden von Resourcen

Verfasst: Montag 16. August 2010, 14:07
von Hyperion

Re: bottle -> Probleme mit dem Einbinden von Resourcen

Verfasst: Montag 16. August 2010, 14:48
von ms4py
powered_by_coffee hat geschrieben:Wenn ich ein Bild im Projektordner habe, muss ich das doch irgendwie über ein relativen Pfad ansprechen können?
Nein, bottle ist doch kein Webserver. Wenn du die URL '/image.png' aufrufst und dafür ein Bild haben willst, musst du bei bottle eine Route definieren und das Bild als "static file" zurückgeben.
In der Regel erledigt man das durch einen speziellen Ordner für "static files", der dann entweder durch bottle selbst (wie in der Doku gezeigt) oder einen Webserver bereitgestellt wird.

Re: bottle -> Probleme mit dem Einbinden von Resourcen

Verfasst: Montag 16. August 2010, 15:56
von powered_by_coffee
Ok alles klar.
Danke.

Re: bottle -> Probleme mit dem Einbinden von Resourcen

Verfasst: Montag 16. August 2010, 20:25
von noisefloor
Hallo,

wenn du es nicht über static_file machen möchtest muss du dir halt noch lokal einen Webserver aufsetzen.

Das geht mit Python ganz einfach, indem du im Verzeichnis, wo die Bilder liegen, den Befehl

Code: Alles auswählen

python -m SimpleHTTPServer
ausführst. Dadurch startet unter 'http://0.0.0.0:8000' ein Webserver, der den (gesamten!) Inhalt des Verzeichnisses liefert.

Im Template funktioniert dann auch

Code: Alles auswählen

<img src="http://0.0.0.0:8000/pfad/zum/bild/captcha.png
WICHTIG: hängt der Rechner am Netz, ist das Verzeichnis auch darüber erreichbar!

Gruß, noisefloor

Re: bottle -> Probleme mit dem Einbinden von Resourcen

Verfasst: Dienstag 17. August 2010, 07:47
von Defnull
Die Bilder nicht durch Bottle sondern direkt von einen Webserver ausliefern zu lassen bringt erst etwas, wenn Bottle selbst auch hinter diesem webserver hängt. Sonst hast du ja zwei Server laufen und sehr hässliche URIs für die Bilder.

Es gibt also zusammengefasst zwei sinnvolle Möglichkeiten:

- Bilder (und anderes statisches Zeug) über Bottle mit einer extra route und 'return static_file()' ausliefern. Das ist schnell genug für die meisten Anforderungen. Außerdem hat das den Voreil, das man 'schöne' URLs für seine Bilder bekommt, selbst wenn sie in zig unterordnen oder sogar in ner Datenbank versteckt sind.
- Wenn Bottle eh durch einen Apache oder anderen Webserver geschliffen wird (mod_proxy, mod_wsgi) wird, kann der auch die Arbeit machen. Dazu konfiguriert man den Webserver so, das er Dateien aus bestimmten Verzeichnissen direkt aus liefert, statt vorher Bottle zu fragen. Besonders bei sehr vielen oder sehr großen Dateien (Download-Seite) ist das von Vorteil, da der ganze Datenhaufen nicht erst durch nen Python Script genudelt werden muss.