Hallo!
Lange konnte ich nicht entwickeln, nun wieder da
Eine kurze Frage habe ich.
Auf einer meienr Seiten biete ich einen Downloadlink an, welcher auf eine Datei des Zopeservers verweist. Die Datei erzeuge ich derzeit beim Seitenaufbau via Pythonskript. Aus Performancegründen möchte ich, die Datei erst dann generieren, wenn jemand auf den Link drückt. Kann ich dem Link selbst eine Action zuwenden, die dann erst mein Erstellscript ruft und dann auf die frisch erstellte Datei linkt? Bei Actions muss man doch immer einen Button angeben !? Context wäre Link, doch Button??
Ich vermute, dass es irgendwie geht, nur wie?
Viele Grüße aus Berlin
JR
Download Link, welcher vorher die Downloaddatei erzeugen läs
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi JR!JR hat geschrieben:Kann ich dem Link selbst eine Action zuwenden, die dann erst mein Erstellscript ruft und dann auf die frisch erstellte Datei linkt?
Du brauchst keine besondere Action dafür. --> lass alles von einem Python-Script erledigen.
- Nachsehen, ob die Datei bereits erstellt ist.
- Wenn noch nicht erstellt --> erstellen
- Datei zurück liefern.
Falls die Datei sich ständig ändert, dann kannst du ja statt einer Datei im Dateisystem, ein StringIO-Objekt erstellen, das du befüllst und dann über das Python-Script zurück lieferst.
So funktioniert der Download:
Code: Alles auswählen
request = container.REQUEST
response = request.RESPONSE
s = (
"Hallo Welt\n"
"Hallo Welt"
)
response.setHeader('content-type', 'text/plain')
response.setHeader('content-length', str(len(s)))
response.setHeader('content-disposition', 'attachment; filename=hallowelt.txt')
response.write(s)
lg
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Hi Gerold!
Danke für deinen Tipp, doch leider ist es so, dass ich die XML-Datei auf jedem Fall auch anlegen möchte, da sie für eine Datenanzeige via XSL verwendet wird und der Anwender gleichzeitig die Möglichkeit haben soll, die Datei herunter zu laden.
Mein Script, welches die Datei jedesmal beim Aufbau der Seite (auf welcher der Link zur Datei erscheint) sieht so aus:
Mein Link nennt sich Druckansicht und soll erst die XML-Datei mit dem obigen Script erstellen lassen und anschließend direkt die Datei anzeigen (also auf sie verweisen). Mit dem Punkt "Ziel speichern unter..." bietet sich zugleich eine Downloadmöglichkeit an.
Das Problem ist momentan nur, dass der Seitenaufbau unnötig lange dauert. Die Seite wiederum enthält ein Formular, welches den Inhalt der XML-Datei sozusagen verändert, wonach sie beim Download stets neu geschrieben werden sollte.
Ich hoffe, dich mit dieser Beschreibung nicht zu getextet zu haben
Grüße
JR
Danke für deinen Tipp, doch leider ist es so, dass ich die XML-Datei auf jedem Fall auch anlegen möchte, da sie für eine Datenanzeige via XSL verwendet wird und der Anwender gleichzeitig die Möglichkeit haben soll, die Datei herunter zu laden.
Mein Script, welches die Datei jedesmal beim Aufbau der Seite (auf welcher der Link zur Datei erscheint) sieht so aus:
Code: Alles auswählen
id = 'Startliste_%s.xml' %datum
startlisten_ordner = getattr(context, 'Startlisten', None)
try:
startlisten_ordner.manage_delObjects(id)
except:
pass
if datum:
xml_Header = '<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>\n<!DOCTYPE startliste SYSTEM "startliste.dtd">\n<?xml-stylesheet type="text/xsl" href="startliste.xsl"?>\n\n'
data = xml_Header
data = data + '<startliste>\n'
data = data + '<datum>%s</datum>\n' % datum
sql_result = context.querie_flg_alle_fluege_zu_einem_datum(flg_date = context.format_datestring_to_sql_py(datum))
index = 0
for x in sql_result:
data = data + '<flug>\n'
data = data + '<Nr>' + str(sql_result[index][9]) + '</Nr>\n'
data = data + '<Luftfahrzeugfuehrer>' + str(sql_result[index][10]) + '</Luftfahrzeugfuehrer>\n'
data = data + '<Begleiter>' + str(sql_result[index][12]) + '</Begleiter>\n'
data = data + '<Luftfahrzeugmuster>' + str(sql_result[index][15]) + '</Luftfahrzeugmuster>\n'
data = data + '<Luftfahrzeugkennzeichen>' + str(sql_result[index][14]) + '</Luftfahrzeugkennzeichen>\n'
data = data + '<Startart>' + str(sql_result[index][22]) + '</Startart>\n'
if str(sql_result[index][18])[:5] != '00:00':
data = data + '<Startzeit>' + str(sql_result[index][18])[:5] + '</Startzeit>\n'
if str(sql_result[index][19])[:5] != '00:00':
data = data + '<Landezeit>' + str(sql_result[index][19])[:5] + '</Landezeit>\n'
if str(sql_result[index][20])[:5] != '00:00':
data = data + '<Segelflugzeit>' + str(sql_result[index][20])[:5] + '</Segelflugzeit>\n'
if str(sql_result[index][21])[:5] != '00:00':
data = data + '<Motorflugzeit>' + str(sql_result[index][21])[:5] + '</Motorflugzeit>\n'
data = data + '<Bemerkungen>' + str(sql_result[index][23]).replace('\n', '') + '</Bemerkungen>\n'
data = data + '<Ausbildung>' + str(sql_result[index][24]) + '</Ausbildung>\n'
data = data + '</flug>\n'
index += 1
data = data + '</startliste>\n'
data = context.code_utf_to_iso(data)
startlisten_ordner.manage_addFile(
id,
file = data,
title = 'Startliste vom %s' % datum,
content_type = "text/plain"
)
return None
Das Problem ist momentan nur, dass der Seitenaufbau unnötig lange dauert. Die Seite wiederum enthält ein Formular, welches den Inhalt der XML-Datei sozusagen verändert, wonach sie beim Download stets neu geschrieben werden sollte.
Ich hoffe, dich mit dieser Beschreibung nicht zu getextet zu haben
Grüße
JR
- gerold
- Python-Forum Veteran
- Beiträge: 5555
- Registriert: Samstag 28. Februar 2004, 22:04
- Wohnort: Oberhofen im Inntal (Tirol)
- Kontaktdaten:
Hi JR!JR hat geschrieben:leider ist es so, dass ich die XML-Datei auf jedem Fall auch anlegen möchte, da sie für eine Datenanzeige via XSL verwendet wird und der Anwender gleichzeitig die Möglichkeit haben soll, die Datei herunter zu laden.
Ich hätte die Datei bereits erstellt, nachdem das Formular ausgefüllt und abgeschickt wurde. Aber das was du in deinem Fall wahrscheinlich brauchst, ist ein Redirect zur neu erstellten Datei.
Das funktioniert so:
Code: Alles auswählen
request = container.REQUEST
response = request.RESPONSE
...
...
response.redirect(startlisten_ordner[id].absolute_url())
Gerold
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.