Seite 1 von 1
Problem beim arbeiten mit externen Skripten
Verfasst: Dienstag 16. Dezember 2003, 12:21
von TripleH
Tach auch, hab da ein Problem. Ich arbeite unter ZOPE mit einem externen Skript in Python. Auf meinem Rechner , der nicht im WWW ist läuft es ohne Probleme, aber wenn ich alle Skripte 1:1 ins Netz stelle bekomme ich immer eine Fehlermeldung
"Invalid request
The parameter, x, was omitted from the request."
Vieleicht weiß mir jemand zu helfen.
Schon mal vielen Dank.
Verfasst: Dienstag 16. Dezember 2003, 15:15
von Beyond
Deine Script braucht einen Parameter "x" den Du beim Aufruf nicht angegeben hast.
cu beyond
frage
Verfasst: Dienstag 16. Dezember 2003, 15:38
von TripleH
Hallo!
Ich habe ja eine x Variable die ich übergeb.
und zwar im skript
def test(x):
auf meinem Laptop funktioniert auch alles super und habs genauso für den Zope server gemacht der online ist und dann kommt diese Fehlermeldung und ich hab keine Idee mehr.
Gibt es unterschiedliche Zope Versionen aber das dürfte ja keine Rolle spielen oder?
Verfasst: Dienstag 16. Dezember 2003, 17:37
von Dookie
Hi,
ohne ein paar mehr Infos, also zumindest der Kopf zum Script und wie es unter Zope aufgerufen wird, kann man da nur rumrätseln.
Gruß
Dookie
frage
Verfasst: Dienstag 16. Dezember 2003, 18:38
von TripleH
OK.
Hier mein Dtml Skript.
Code: Alles auswählen
<dtml-var standard_html_header>
<center><h2><br>Seiteneingabe.</h2>
<h1><br></h1> <h3>
<form action="aktionsSkript">
Bitte Seitenname eingeben. <input type="text" name="x"><br><br></h3>
<input type="submit">
<input type=reset value="Eingabe löschen">
<input type=button value="Zur&ck" onClick="history.back()">
</center>
</form>
<dtml-var standard_html_footer>
und das python skript dazu welches ich Seitenname.py nene
Code: Alles auswählen
def Seite(x):
f =open ("PnH-twiki-access-dec03.log", 'r')
zaehler = 0
z1 = 0
z2 = 0
for line in f.readlines():
linearray = line.split("|")
if linearray[3] == " view " and linearray[4].strip() == x:
zaehler += 1
if linearray[6].startswith(' 193.175.240') or linearray[6].startswith(' 172.30.30') or linearray[6].startswith(' 192.168'):
z1 += 1
else:
z2 +=1
f.close()
return "Auf die Seite %s wurde %i mal zugegriffen werden. Intern: %i Extern: %i" % (x, zaehler, z1, z2)
die Log Datei ist im Ordner var unter Zope und das Skript im Ordner Extensions.
Die externe MEthode ist so:
ID: Seite
Modulname:Seitenname
Function:name(so gehts bei mir auf Laptop) oder auch Seite(wie die Funktion im python skript)
all dies Funktioniert wie gesagt gut unter dem Zope auf meinem Laptop nur aufm Zope server der online ist hab ich alles genauso gemacht und erhalte halt die Fehler meldung siehe oben.
Ich hoffe es kann mir jemand helfen.
mfg
Verfasst: Dienstag 16. Dezember 2003, 18:56
von Dookie
Hi TripelH,
wundert mich, daß das auf dem Laptop funktioniert, Variablen werden normalerweise in einem Requestobjekt übergeben und dann von dort geholt.
z.B. so:
innerhalb eines normalen Pythonscripts, von da aus würde ich dann das Externe Script aufrufen.
Gruß
Dookie
frage
Verfasst: Dienstag 16. Dezember 2003, 19:59
von TripleH
Dookie du bist der beste!!!
Ich weiß jetzt bin ich wieder der Dummi aber wie ichs seh muss ich im Dtml Skript nichts ändern oder auch nicht in der externen Methode sondern im Python Skript.
Demzufolge müßte es doch dann so aussehen oder
Code: Alles auswählen
request = container.REQUEST
x = request["x"]
def Seite(x):
f =open ("PnH-twiki-access-dec03.log", 'r')
zaehler = 0
z1 = 0
z2 = 0
for line in f.readlines():
linearray = line.split("|")
if linearray[3] == " view " and linearray[4].strip() == x:
zaehler += 1
if linearray[6].startswith(' 193.175.240') or linearray[6].startswith(' 172.30.30') or linearray[6].startswith(' 192.168'):
z1 += 1
else:
z2 +=1
f.close()
return "Auf die Seite %s wurde %i mal zugegriffen werden. Intern: %i Extern: %i" % (x, zaehler, z1, z2)
weil es geht ja anscheinend nur um die Übergabe und return funktioniert ja dann ohne Probs oder?
Vielen Dank im vorraus weil darf nicht soviel probieren die nächste Version von mir muss laufen.
Gruß zurück
Verfasst: Dienstag 16. Dezember 2003, 20:50
von Dookie
Ich würd das dtml-script so ändern, dass es auch die Auswertung vom Forumular übernimmt, also die Auswertung von dem Request und dann mit dem Parameter das Script aufruft.
Gruß
Dookie
frage
Verfasst: Mittwoch 17. Dezember 2003, 16:49
von TripleH
Hallo!
Jetzt hast du mich total verwirrt!
die 2 Zeilen kommen also nicht in mein externes Python.
Skriptrequest = container.REQUEST
x = request["x"]
sondern ich leg ein neues internes Skript an? wo ich diese 2 Zeilen reinschreib?
Doch wie ruf ich von dort das externe Skript auf?Ich dachte das macht man nur ausm Dtml Skript mir ner externen Methode?
Ich hoffe du kannst mir noch mal helfen und es am besten wie für ein kleines Kind erklären..
Danke
MFG
Basti
frage
Verfasst: Donnerstag 18. Dezember 2003, 21:54
von TripleH
Hallo!
Ich hoffe mir kann jemand helfen.
Der Grund warum ich so dumm frag leider ist das ich Python gut kann und dies auch mein Aufgabenbereich war.
Leider ist der Mann für HTML und DTML ausgestiegen und ich hab kaum Kenntnisse in beidem.
Ich hab mich zumindest reingelesen aber leider gibs noch Probleme.
und zwar hab ich als erstes mein Zope,DTML Skript verändert.
Code: Alles auswählen
<dtml-var standard_html_header>
<center><h2><br>Diese Seite ermittelt für Sie die Top 10 der am häufigsten geladenen Seiten.</h2>
<h1><br></h1> <h3>
<form action="test">
Bitte Seitenname eingeben. <input name="x"><br><br></h3>
<input type="submit">
<input type=reset value="Eingabe löschen">
<input type=button value="Zur&ck" onClick="history.back()">
</center>
</form>
<p><b><span tal:content="python: here.test(request.x)<p><b><
<form action="SodaSeite">
<dtml-var standard_html_footer>
test ist ein python skript das ich ertellt hab mit der Übergabevariable x.
und dort hab ich diese 2 Zeilen geschrieben
request = container.REQUEST
x = request["x"]
dnach versuch ich x auszuwerten und die externe Methode Seite aufzurufen aber es geht leider nichts.Irgendwie hab ich nen Denkfehler.
Ich hoffe es kann mir jemand nochmal helfen damit ich zumindest einen kleinen Einstieg in DTML bekomm.
Danke im vorraus.
MFG
Basti
Verfasst: Donnerstag 18. Dezember 2003, 22:26
von Dookie
Hi Basti,
schau dir mal folgende Seite an:
http://www.dzug.org/ZopeBuch/ZWiki/ZBAdvZPT Da wird das Scripting beschreiben, auch wie Formulare ausgewertet werden oder externe Scripte aufgerufenwerden können.
Gruß
Dookie
frage
Verfasst: Freitag 19. Dezember 2003, 00:52
von TripleH
Hallo!
Puh hab das Kapitel mal durchgearbeitet und ist eldier nicht ganz einafch zu verstehen aber ich hoff ich hab was mitgenommen dort.
Wenn ichs also richtig verteh hab ich mein formular:
Code: Alles auswählen
<dtml-var standard_html_header>
<center><h2><br>Diese Seite ermittelt für Sie die Top 10 der am häufigsten geladenen Seiten.</h2>
<h1><br></h1> <h3>
<form action="test">
Bitte Seitenname eingeben. <input type="text" name="x"><br><br></h3>
<input type="submit">
<input type=reset value="Eingabe löschen">
<input type=button value="Zur&ck" onClick="history.back()">
</center>
</form>
<dtml-var standard_html_footer
hier ruf ich dann einfach nur mein python Skript "test" auf und übergeb x.
und in meinem python Skript müßt ich doch dann nur noch mein externes Skript aufrufen über meine externe Methode SodaSeite.
Code: Alles auswählen
request = container.REQUEST
x = request["x"]
"python:here.SodaSeite(x)"
Ist mein Anstz soweit richtig oder hab ich schon wieder einen grundlegenden Denkfehler?
Leider ist in dem Kapitel nicht ganz klar herausgekommen wie man externe Skripte aufruft:(
Leider schein der Syntax wieder nciht ganz richtig zu sein da er anscheinend nicht auf das externe Skript zugreift.
Ich hoff mir kann noch jemand nen Tipp gegen.
Gruß
Basti
Verfasst: Freitag 19. Dezember 2003, 02:22
von Dookie
Hi nochmal,
bei dtml kannst Du dir sogar das mit dem request sparen, da zope da schon die Parameter auswertet, die an das dtml übergeben werden aus dem Forumular.
sollte die Ausgaben der Funktion "SodaSeite" aus Deinem externen Script "here" in das test-dtml schreiben.
ansonst versuches mit
Gruß
Dookie
frage
Verfasst: Freitag 19. Dezember 2003, 13:12
von TripleH
Hallo!
Ich bins mal wieder.
Also ich hab nichts an meinem Formular Skript geändert.
Von dort Ruf ich ja das Test Skript auf welches jetzt so aussieht!
Code: Alles auswählen
<dtml-var standard_html_header>
<dtml-var expr="here.SodaSeite(REQUEST.form['x'])">
<dtml-var standard_html_footer>
Mein Problem besteht darin das es so nicht funtioniert.
Du sagst here soll der Name des externen Skripts sein.
Da ich mit vielen externen Skripten im Extensions Ordner arbeite ist meine Frage ob es notwendig ist sie here zu nennen oder ob ich es weiterhin Seitenname nennen kann.
SodaSeite ist bei mir die externe Methode wo der Modulname "Seitenname" und Function "Seite ist.
Ich hab den Aufruf schon angeglichen auf
[coede]<dtml-var standard_html_header>
<dtml-var expr="Seitenname.Seite(REQUEST.form['x'])">
<dtml-var standard_html_footer>[/code]
aber jedes mal kommt der Fehler Seitenname ist not definied.
Ich dachte man müßte nur die externe Methode aufrufen da in ihr ja die ganzen Parameter gespeichert sind und das es dann so aussieht
Code: Alles auswählen
<dtml-var standard_html_header>
<dtml-var expr="SodaSeite(REQUEST.form['x'])">
<dtml-var standard_html_footer>
aber dann kommt diese Fehlermeldung.
Zope has encountered an error while publishing this resource.
Error Type: IndexError
Error Value: list index out of range
Ich hoffe du kannst mir nochmal helfen.
MFG
Basti
frage
Verfasst: Sonntag 21. Dezember 2003, 16:51
von TripleH
Hallo!
Bitte Dookie hilf mir noch einmal.
Ich versuche es hier schon Tag und Nacht hinzubekommen!
Mein letzter Stand ist immer noch das ich aus meinem Formular Skript in ein anderes Skript springe.
Ich versuchs in DTML und in Python:
In DTML sieht die Seite dann bei mir so aus:
Code: Alles auswählen
<dtml-var standard_html_header>
<dtml-call expr="SodaSeite(x)">
<dtml-var standard_html_footer>
und in Python:
Code: Alles auswählen
request = container.REQUEST
x = request["x"]
context.SodaSeite(x)
SodaSeite ist die externe Methode und wenn ich alles richtig verstanden hab wird doch as externe Skript nur über die externe Methode aufgerufen.
Doch jedesmal bei beiden Varianten erscheint dieser Fehler!!
Code: Alles auswählen
Zope Error
Zope has encountered an error while publishing this resource.
Error Type: IndexError
Error Value: list index out of range
--------------------------------------------------------------------------------
Troubleshooting Suggestions
The URL may be incorrect.
The parameters passed to this resource may be incorrect.
A resource that this resource relies on may be encountering an error.
For more detailed information about the error, please refer to the HTML source for this page.
If the error persists please contact the site maintainer. Thank you for your patience.
Normalerweise hab ich doch jetzt alles richtig übergeben oder?
Und ein Fehler innerhalb meines externen Skripts darf es doch eigentlich nicht sein oder?
Ich hoffe jemand kann mir helfen und mir nen kleinen Tipp geben.
MFG
Basti