[gelöst] Dynamisches Stylesheet mit mod_python.publisher?

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
wakko0815
User
Beiträge: 17
Registriert: Sonntag 20. Mai 2007, 17:47
Wohnort: Berlin
Kontaktdaten:

Hi,

ich möchte in meiner Web-Anwendung ein Stylesheet einbinden, das dynamisch
in einem Python-Skript erzeugt wird:

Code: Alles auswählen

<link rel="stylesheet" type="text/css" href="stylesheet.py"/>
Mit dem psp-Handler ging das relativ einfach indem man einfach diese zwei
Zeilen vor das eigentliche Stylesheet gesetzt hat:(stylesheet.psp)

Code: Alles auswählen


<link rel="stylesheet" type="text/css" href="stylesheet.psp"/>
-----------------------------------------------------------------
(stylesheet.psp)
<%
req.content_type = "text/css"
req.send_http_header() 
%>
body {background-color:#005dc5;
font-family: "Arial";
text-align:center; 	
}
p.menu {
	height:45px;
(....)
Aber wie macht man das mit dem mod_python.publisher
und einer "stylesheet.py" ?
Zuletzt geändert von wakko0815 am Montag 4. Juni 2007, 09:35, insgesamt 1-mal geändert.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

eigentlich nichts anderes.

in der hauptseite nehmen wir an sie heißt index.py gibt es die funktion news.

Code: Alles auswählen

def news(req):
    req.write("<link rel="stylesheet" type="text/css" href="stylesheet.py/main"/>")
und so würde dann der Quelltext von stylesheet.py aus sehen:

Code: Alles auswählen

def main(req):
    req.content_type = "text/css"
    req.send_http_header()
    return """
body {background-color:#005dc5;
font-family: "Arial";
text-align:center;     
}
p.menu {
    height:45px;
(....)
"""
in der stylesheet.py kannst du jetzt alle stylesheets ablegen einfach neue funktionen mit anderen namen ausdenken.

PS: Ungetestet habe z.Z kein mod_python installiert, habe mal wieder formatiert :-)
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Wenn du dich ohnehin mit mod_python an Apache bindest, kannst du auch mod_rewrite verwenden.
wakko0815
User
Beiträge: 17
Registriert: Sonntag 20. Mai 2007, 17:47
Wohnort: Berlin
Kontaktdaten:

@ Sr4l
Das funktioniert so leider nicht. Da gibts nur einen 404-Error weil das
Stylesheet nicht im Pfad stylesheet.py/stylesheet gefunden wird(stylesheet
heisst halt die Funktion in der stylesheet.py). Da wird wohl die URI nicht
richtig geparst. Aber wie ich dem Apache bzw. dem mod_python beibringen
kann, dass stylesheet halt der Name der zu verwendenden Funktion ist ist
mir leider auch nicht klar.

@YOGI
Mit dem mod_rewrite habe ich mich noch nicht beschäftigt, also
vielleicht könntest Du mir noch verraten, inwiefern der mod_rewrite bei meinem
Problem hilfreich sein könnte.
Regelmässiges Versagen ist auch eine Form von Zuverlässigkeit
Y0Gi
User
Beiträge: 1454
Registriert: Freitag 22. September 2006, 23:05
Wohnort: ja

Mit mod_rewrite lassen sich URLs umschreiben. So kannst du beispielsweise einen Request von /stylesheet oder /stylesheet.py auf /stylesheet.py/main umbiegen, falls das nötig ist. Ohnehin kannst du damit die .py-Endung verstecken.

Oder habe ich da ein (Teil-)Ziel missverstanden?
wakko0815
User
Beiträge: 17
Registriert: Sonntag 20. Mai 2007, 17:47
Wohnort: Berlin
Kontaktdaten:

Ja. Das mit dem mod_rewrite sieht recht hilfreich aus um die URL weiter von
GET-Parametern zu befreien. Beim PSP-Handler musste ich halt doch recht
ausgiebig mit GET-Parametern um mich werfen.

Aber das hilft leider grad nicht bei meinem Problem, dass das Stylesheet aus der
*.py-Datei nicht so verarbeitet wird, wie ich es gern hätte. Also zur Zeit wird
es überhaupt nicht verarbeitet und führt leider nur zu dem 404/Not Found-Error :
req.write("<link rel="stylesheet" type="text/css" href="stylesheet.py/stylesheet"/>")

Ich vermute, der Fehler liegt irgendwie in der Apache-Konfiguration, so dass die
Angabe der Funktion "stylesheet" leider als Pfad interpretiert wird und nicht als
Funktion.
Regelmässiges Versagen ist auch eine Form von Zuverlässigkeit
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Ich habe mod_python gerade installiert und werde es mal testen.
Melde mich gliech wieder nach dem Essen ;-)
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Nein ich esse nicht solange. Nach dem Essen hatte ich es schon wieder vergessen und dann eben beim konfigurieren vom apache ist mir noch ein Fehler passiert den ich lieber nicht verrate ;-).

Ich habe also folgendes ich habe einen Ordner in dem ich den mod_python publisher aktiviert habe und folgende zwei Dateien:

lol.html

Code: Alles auswählen

<link rel="stylesheet" type="text/css" href="style.py/erster"/>

<html>
lol<br>
lol<br>
</html>
style.py

Code: Alles auswählen

from mod_python import apache
from random import randint as rnd

colors = ["#FF0000","#00FF00","#0000FF"]

def erster(req):
    req.content_type = "text/css"
    req.send_http_header() 
    return """\
body {background-color:%s;
font-family: "Arial";
text-align:center;     
}"""%(colors[rnd(0,2)])
Den Python Code im Header zuversehen macht sicher sinn ebenso die HTML Datei 'Norm' gerecht zu schreiben.

Also bei mir funktiponiert das bsp die lol.html Seite ändert beim reload zwischen den drei Grundfarben per zufall.
Wenn was nicht geht bitte Fehlermeldung.

PS: Habe mein vorheriges Beispiel garnicht erst getestet ;-)
wakko0815
User
Beiträge: 17
Registriert: Sonntag 20. Mai 2007, 17:47
Wohnort: Berlin
Kontaktdaten:

Grossartige Arbeit! Es funktioniert.
Alles, was gefehlt hat war die Zeile

Code: Alles auswählen

from mod_python import apache
Seit ich die drin habe gehts.
Allerdings musste ich noch den Pfad für ein paar Hintergrundbilder
anpassen, da die seit dem im Verzeichnis stylesheet/ gesucht wurden...
Macht aber nix.
Danke.
Regelmässiges Versagen ist auch eine Form von Zuverlässigkeit
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

bitte.
das mit den verzeichniss ist immer so das der url immer pydatei.py/funktion ist
und der schrägstrich als ordner interpretiert wird ich habe immer standardmäßig ../ in meine templates das gewöhnt man sich mit mod python an ;-)
Antworten