Zope: Attribute auf dassselbe Python Script übertragen

Django, Flask, Bottle, WSGI, CGI…
Antworten
rgroll
User
Beiträge: 14
Registriert: Dienstag 24. Juli 2012, 08:42

Hallo und Guten Tag,

ich habe folgendes Problem. Ich habe eine html-form in Python-Code eingebaut(per print "<form...").

Code: Alles auswählen

 print "          <td align=\"center\" valign=\"middle\"><br><form action=\"dtml_meine_zu_beantwortende_vertretungsuebersicht?submit_id=1&vac_id="+str(dict['vacation_pkey'])+"\" method=\"get\">"
 print "              <input type=\"submit\" name=\"submit\" value=\"genehmigen\" ></form></td>"
Nun rufe ich dasselbe PythonScript mit dem Submit-Button auf. Per Get-Methode werden die Attribute übergeben.
Aber jetzt kann ich nicht auf diese per get-methode übergebenden Attribute zugreifen.

Code: Alles auswählen

submit_id=getattr(context,"submit_id", None)
if submit_id is not None:
 print submit_id
oder einfach so

Code: Alles auswählen

try:
 if submit_id==1:
  context.sql_annehmen(substitute_user=str(sm.getUser()), vac_id=str(vac_id)).dictionaries()
 elif request/submit_id==0:
  context.sql_ablehnen(substitute_user=str(sm.getUser()), vac_id=str(vac_id)).dictionaries()
except NameError:
 print " submit_id hat keinen Wert"
Kann mir vielleicht jemand helfen?
deets

Das ist *grauenvoll* aus. So HTML zu generieren ist 90er Jahre. Bestenfalls.

Bitte benutz ZOPE wie es gedacht ist. Warum uebergibst du die Parameter nicht an dein Python-Skript von aussen aus einem DTML? Und warum renderst du die Antwort nicht mit DTML?
BlackJack

@rgroll: Die Einrückung bei Deinem Quelltext ist kaputt.

HTML per ``print`` ausgeben, insbesondere wenn man schon ein Rahmenwerk mit Templates verwendet, ist IMHO ziemlich kaputt. Zudem verwendest Du Python auch untypisch wenn Du mit ``+`` und `str()` Zeichenketten zusammen baust. Das macht man eher in BASIC — Python hat Operatoren und Methoden für/auf Zeichenketten um Werte in eine Zeichenkette hinein zu formatieren (``%``/`str.format()`).

Literale Zeichenketten können auch in ' eingefasst werden, dann braucht man vor " innerhalb der Zeichenkette keinen \ schreiben.

Einen Wert `dict` zu nennen ist keine gute Idee, denn es gibt eine Funktion bzw. einen Typ mit dem Namen, und *das* Objekt verdeckt man damit.

Im letzten Quelltextschnippsel versuchst Du anscheinend `request` durch `submit_id` zu dividieren‽
rgroll
User
Beiträge: 14
Registriert: Dienstag 24. Juli 2012, 08:42

also ich schreibe dann in einem dtmldocument so etwas

Code: Alles auswählen

<dtml-in sql_vertretungen_annehmen(username=<dtml-var "REQUEST.AUTHENTICATED_USER.getUserName()">>
        <tr>
         <td>"+str(dict['vacation_pkey'])+"</td>
         <td>"+str(dict['Name'])+"</td>
         <td>"+str(dict['Datum von bis'])+"</td>
         <td  align="center">"+str(dict['Bewerbungsdatum'])+"</td>
         <td align=\"center\" valign=\"middle\"><br><form action=\"dtml_urlaubsantraege_genehmigen?submit_id=1&vac_id="str(dict['vacation_pkey'])" method="get">
              <input type=\"submit\" name=\"submit\" value=\"genehmigen\" ></form></td>"
         <td align=\"center\" valign=\"middle\"><br><form action=\"dtml_urlaubsantraege_genehmigen\">"
             <input type=\"submit\" name=\"submit\" value=\"ablehnen\" ></form></td>"
       </tr>"
</dtml-in>
Ich weiß nicht wie ich das Attribut username von sql_vertretungen_annehmen beschreiben soll, so wie es hier steht sagt er mir invalid attribute name. Und ich weiß auch nicht ob ich in einem dtml-in tag in der Attributliste ein dtml-var-tag setzten kann. Bitte hilfe.
rgroll
User
Beiträge: 14
Registriert: Dienstag 24. Juli 2012, 08:42

@blackjack
danke für die hilfe mit dem dict objekt
Im letzten Quelltextschnippsel versuchst Du anscheinend `request` durch `submit_id` zu dividieren‽
nein das soll eine Pfadangabe sein.
Literale Zeichenketten können auch in ' eingefasst werden, dann braucht man vor " innerhalb der Zeichenkette keinen \ schreiben.
dazu braucht man meines wissens auch eine Escape Sequenz, steht zumindest im RRZN Python Heft

Und danke für den Basic hinweis aber ich werde nicht noch eine weitere Sprache einbauen. Ich werde das jetzt in dtml docs umschreiben.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

rgroll hat geschrieben:
Im letzten Quelltextschnippsel versuchst Du anscheinend `request` durch `submit_id` zu dividieren‽
nein das soll eine Pfadangabe sein.
Das ist vielleicht das von dir gewünschte Ergebnis, dort steht aber ganz offensichtlich eine Division.
rgroll hat geschrieben:
Literale Zeichenketten können auch in ' eingefasst werden, dann braucht man vor " innerhalb der Zeichenkette keinen \ schreiben.
dazu braucht man meines wissens auch eine Escape Sequenz, steht zumindest im RRZN Python Heft
Dann steht in dem Heft nicht alles drin. Natürlich braucht man unter Umständen noch Escape-Sequenzen, man spart sich diese jedoch bei den ganzen Anführungszeichen:

Code: Alles auswählen

'<input type="submit" name="submit" value="genehmigen">'
rgroll hat geschrieben:Und danke für den Basic hinweis aber ich werde nicht noch eine weitere Sprache einbauen. Ich werde das jetzt in dtml docs umschreiben.
Das war kein Hinweis darauf, dass du Basic verwenden sollst, sondern dass dein Code aussieht wie mit Basic geschrieben. Das ist übrigens Kritik und kein Lob ;-) BlackJack hat doch in dem Absatz geschrieben, wie man es richtig macht. Zumindest was man noch richtig machen kann, wenn man nicht den vernünftigen Ansatz über Templates löst.
Das Leben ist wie ein Tennisball.
deets

rgroll hat geschrieben: Ich weiß nicht wie ich das Attribut username von sql_vertretungen_annehmen beschreiben soll, so wie es hier steht sagt er mir invalid attribute name. Und ich weiß auch nicht ob ich in einem dtml-in tag in der Attributliste ein dtml-var-tag setzten kann. Bitte hilfe.
All diese Dinge werden ausfuehrlich im ZOPE-Book erklaert, auf das ich dich schon wiederholt verwiesen habe. dtml-var so wie du es verwendest geht *NICHT*, da muss stattdessen ein expr-Attribut stehen. Das sind absolute basics, die musst du lernen. Denn mit diesem Cargo-Cult Ansatz den du hier zeigst wirst du nicht weiterkommen.
rgroll
User
Beiträge: 14
Registriert: Dienstag 24. Juli 2012, 08:42

Ich lese das zope-book immer wieder aber ich finde nicht gescheites das mit meinen fehlermeldungen übereinstimmt.
ok ich benutze das expr attribut. Muss ich dann Argumente in runden Klammern einfügen?
so geht's nicht |Fehler: invalid attribut name

Code: Alles auswählen

<dtml-in expr=sql_vertretungen_annehmen(<dtml-var "REQUEST.AUTHENTICATED_USER.getUserName()">)>
Ich habe das allerdings in einem dtml-document. sollte es in eine dtml-method?
rgroll
User
Beiträge: 14
Registriert: Dienstag 24. Juli 2012, 08:42

Ich könnte es natürlich auch in einem Page Template, wie ich es zuerst probiert habe, integrieren. Aber da weiß ich nicht wie ich if-anweisungen, sql-Abfragen die nur eine nur einen Wert zurückgeben in einer variablen speichere, und wie ich diese Variablen dann in einen link(zb url?username=variable&dep_id=variable2) verpacke, mache.
deets

Statt dtml-var in dtml-expr zu verwenden (das geht afaik nicht) musst du (wie schon mal erwaehnt.......) dtml-let verwenden um mit dtml-var zu arbeiten, oder REQUEST - aber nicht *BEIDES*. Und du musst natuerlich auch "" verwend um das expr-Attribut.

Bitte geh einen Schritt zurueck & arbeite mal einfach nur an kleinen Test-Skripten und DTML-Methoden, um dich mit diesen Dingen vertraut zu machen.
rgroll
User
Beiträge: 14
Registriert: Dienstag 24. Juli 2012, 08:42

Ich arbeite daran das ganze mit Page Templates umzusetzen ist das besser oder sollte ich doch lieber mir dtml-methods arbeiten?

wie kann ich in PageTemplates bereits definierte Variable in einem form-tag in dem action attribut-wert anhängen.
so

Code: Alles auswählen

<tal:x repeat="result batch" >

       <span tal:define="vac_id2 result/vacation_pkey>  
         <tr>
          <td><span tal:replace="result/vacation_pkey">vacation_pkey goes here</span></td>
          <td align="center" valign="middle"><br><form action="dtml_vertretungen_annehmen?submit_id=1&vac_id=" method="get">
              <input type="submit" name="submit" value="genehmigen" ></form></td>
         </tr>
       </span>
</tal:x>
deets

Mit tal kennen ich mich nicht aus, werde dazu also nix sagen. Der von dir gezeigte Code ist natuerlich trotzdem 100%ig falsch, da XHTML keine simplen & erlaubt....
Antworten