css in bottle template

Django, Flask, Bottle, WSGI, CGI…
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

ich hab das jetzt geändert:

Code: Alles auswählen

@route('/images/:filename')
def server_static(filename):
    return static_file(filename, root='/home/cedric/bottle/file-server/images')
es geht abber trotzdem nicht, also die Seite wird zwar nach der css-Datei dargestellt, nur das halt die in der css datei verlinkten bilder nicht zu sehen sind
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

dann würde ich mal drauf tippen, dass du in der CSS-Datei immer noch die alten (=falschen) HTML-like Pfade drin hast und nicht korrekt auf die statische Route von Bottle verlinkst.

Gruß, noisefloor
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

Eigentlich hab ich auf die routes verlinkt:
url(/images/login.png)
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

also bei mir funktioniert das 1A.

Wenn die CSS-Datei so aussieht:

Code: Alles auswählen

body {background: url(/test/static/bild.png); }
.kursiv {font-style: italic; color: red; }
und "bild.png" liegt im rootpath bekommt man das Bild als Hintergrundbild.

Sprich: Du musst irgendwie noch irgendwo einen Fehler haben...

Gruß, noisefloor
ceddy
User
Beiträge: 79
Registriert: Mittwoch 25. August 2010, 12:01

SO jetzt geht das, was genau da falsch war weis ich jetzt auch nicht, abber das soll mir egal sein :K
denke nochmal :D
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Damit man eine App leichter universell deployen kann, bietet Flask z.B. eine `url_for()`-Funktion, die man auch in Templates verwenden kann. K.A. ob es das auch bei Bottle gibt.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

nee, dass geht IMHO nur, wenn du Bottle 0.9 in Kombination mit dem Werkzeug Plugin nutzt ;-)

Wobei: Was ist denn daran un-universell? Das einzige, was du ändern müsstest wäre doch "rootpath" - und das ist unabhängig vom Routing.

Gruß, noisefloor
Benutzeravatar
script_composer
User
Beiträge: 29
Registriert: Mittwoch 13. April 2011, 12:42

Im Normalfall sieht das z.B. so aus:

python Projekt ist irgendwo und deine static files z.B. in /var/www oder wo auch immer nur nicht im root-Ordner deiner Applikation

Code: Alles auswählen


static_folder = '/var/www'

@route('static/:file')
def static_files(file):
  return static_file(path, root=static_folder)

Wenn du auch die Unterordner einbeziehen möchtest machst du folgendes:

Code: Alles auswählen


static_folder = '/var/www'

@route('/static/:path#.+#')
def static_files(path):
    return static_file(path, root=static_folder)

ups ist ja schon längst erledigt der thread..... sorry
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hallo

ich bin neu hier und experimentiere nun auch mit bottle. Das mit dem Root-Pfad kapiere ich auch noch nicht so ganz.

Ich hab lokal in einem Ordner c:\Homepage bottle.py, home.py und layout.tpl liegen. Des Weiteren habe ich, wie oben beschrieben, folgende Unterordner gemacht: /var/www und im Ordner www sind die Ordner css, js, img.

Bis jetzt hab ich die css erfolgreich wie folgt eingebunden:

Code: Alles auswählen

#--->START CSS IMPORT<----
from bottle import static_file
@route('/styles/:filename')
def server_static(filename):
    return static_file(filename, root='./css/')
#---->ENDE CSS IMPORT<----
Meine Frage ist nun, kann ich mittels:

Code: Alles auswählen

static_folder = '/var/www'

@route('/static/:path#.+#')
def static_files(path):
    return static_file(path, root=static_folder)
direkt auf alle Pfade bzw Ordner im www verweisen oder muss ich für jeden Ordner ein neues

Code: Alles auswählen

route('/static/
einfügen?

Im Template siehts nun wie folgt aus:

Code: Alles auswählen

<link rel="stylesheet" href="/css/layout.css" type="text/css" />
<script href="/js/jquery-1.7.1.min.js" type="text/javascript"></script>
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,

du kannst auch Pfade in einer Route dynamisch gestalten. Wie das geht, steht in der Doku.

Gruß, noisefloor
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

lackschuh hat geschrieben:Das mit dem Root-Pfad kapiere ich auch noch nicht so ganz.

Ich hab lokal in einem Ordner c:\Homepage bottle.py, home.py und layout.tpl liegen. Des Weiteren habe ich, wie oben beschrieben, folgende Unterordner gemacht: /var/www und im Ordner www sind die Ordner css, js, img.
/var/www ist ein Ordner unter Linux (bzw. Unix).

Die Frage ist, wo du den Ordner wirklich erstellt hast. Der Slash am Anfang des Pfades bedeutet, dass du auf der obersten Ebene der Ordnerhierarchie beginnst. Bei Windows bezieht sich das meines Wissens dann auf das aktuell gewählte Laufwerk. Ist dein Pfad also wirklich /var/www oder ist es C:\Homepage\var\www?
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

/me hat geschrieben: /var/www ist ein Ordner unter Linux (bzw. Unix).

Die Frage ist, wo du den Ordner wirklich erstellt hast. Der Slash am Anfang des Pfades bedeutet, dass du auf der obersten Ebene der Ordnerhierarchie beginnst. Bei Windows bezieht sich das meines Wissens dann auf das aktuell gewählte Laufwerk. Ist dein Pfad also wirklich /var/www oder ist es C:\Homepage\var\www?
Ach so.., der Pfad ist neu C:\Projekt\Homepage\www
Darin (im Ordner www) sind die Ordner css, js, img, thumbs usw. Im Hauptordner ist das bottle.py und home.py und die Templates.

mfg
Benutzeravatar
/me
User
Beiträge: 3556
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

lackschuh hat geschrieben:Ach so.., der Pfad ist neu C:\Projekt\Homepage\www
Dann müsste in deinem bisherigen Code die Definition des Pfades auch entsprechend aussehen:

Code: Alles auswählen

static_folder = 'C:\\Projekt\\Homepage\\www'
Der doppelte Backslash ist erforderlich, da der Backslash als Escape-Zeichen dient und bei Folgen wie "\t" nicht die beiden Zeichen "\" und "t", sondern ein Tabulatorzeichen im String erzeugt. Zwei Backslashes führen dazu, dass im String hinterher genau einer vorhanden ist.
lackschuh
User
Beiträge: 281
Registriert: Dienstag 8. Mai 2012, 13:40

Hi

Super, funktioniert.
friedduck
User
Beiträge: 76
Registriert: Montag 23. Juli 2012, 20:41

Sorry das ich den Beitrag wieder rauskrame, hatte grad das gleiche Problem. Meine Lösung sieht so aus:

Code: Alles auswählen

@route('/css/:filename')
def server_static(filename):
    return static_file(filename, root=os.path.join(os.path.abspath('.'),'css'))
Das dazugehörige CSS:

Code: Alles auswählen

<link rel="stylesheet" type="text/css" href="/css/main.css" />
Und hier noch was zur besseren Verständniss:

Code: Alles auswählen

tpl = os.path.join(os.path.abspath('.'),'tpl')
css = os.path.join(os.path.abspath('.'),'css')
print(tpl,css)
Die Augabe von print:

Code: Alles auswählen

C:\projekte\bottle\src\tpl C:\projekte\bottle\src\css
Nicht vergessen:

Code: Alles auswählen

import sys, os
Vll. kanns ja jmd. gebrauchen.

MfG Friedduck
Zuletzt geändert von friedduck am Donnerstag 4. Oktober 2012, 20:26, insgesamt 2-mal geändert.
BlackJack

@friedduck: Es ist ein bisschen sinnfrei `os.path.join()` zu verwenden wenn man dann doch in einem der Teile einen expliziten Systemabhängigen Pfadtrenner stehen hat. Lass den einfach weg, der ist überflüssig.
friedduck
User
Beiträge: 76
Registriert: Montag 23. Juli 2012, 20:41

Du hast recht, das Beispiel würde nicht unter Linux laufen, habs jetzt korrigiert.
Antworten