Frage

Ich bin Messing mit einem Tornado Web-App um mit dem ich ein bisschen Hilfe brauchen. Ich habe mehrere Kontrollkästchen mit dem gleichen Namen, und ich würde die Werte des ausgewählten POST mag.

<input id=DB_BASED_ID name="activity" value=DB_BASED_ID type="checkbox"/>
<input id=DB_BASED_ID name="activity" value=DB_BASED_ID type="checkbox"/>
<input id=DB_BASED_ID name="activity" value=DB_BASED_ID type="checkbox"/>
<input id=DB_BASED_ID name="activity" value=DB_BASED_ID type="checkbox"/>

kann ich die Werte jedes mit Javascript Pre-POST bekommen, aber ich habe Probleme bekommen diese Liste auf der Python (Tornado) Seite. i nur den höchsten gewählten Wert erhalten.

auf der Python-Seite sieht es aus wie:

...

def post(self):
    email = self.get_argument("email")
    activity = self.get_argument("activity")
War es hilfreich?

Lösung

Es ist in Ordnung mehrere Tags haben die gleiche zu lassen name Attribut, aber die id Attribute muss sein einzigartig - hier, sie sind (nicht, es sei denn jedes dieser Ereignisse des identischen DB_BASED_ID soll irgendwie mit einem ersetzt werden andere Wert? Aber warum zeigen nicht die Dinge wirklich deutlich, wie sie erscheinen in der realen HTML ?!), so dass diese ungültige HTML und unterliegen allen möglichen Problemen.

Sobald das Problem behoben ist, in diesen Behandlungsmethoden, self.request.arguments['activity'] (wenn der String-Schlüssel in ist das Verzeichnis) wird für alle Eingänge eine Liste der nicht leerer Werte 'activity' genannt (falls vorhanden).

Andere Tipps

Dies kann auch mit einer Schleife für eine dynamische Präsentation & Sammlung erreicht werden. Hypothetisch, wenn Sie eine Liste zur Verfügung stellen von der GET-Methode zu überprüfen, kann es wie so in HTML angezeigt werden:

<p><h3>Select Applicable Characteristics:</h3></p>
{% for c in chars %}
    <p><h4><input type="checkbox" name="{{ c }}" value="{{ c }}"/> {{ c }}</h4></p>
{% end %}

Die Methode POST kann diese Liste iterieren, sammeln für jeden und eine Liste Eingabe erstellen. Es ist etwas mehr technisches, aber ich konnte nicht die oben genannte Lösung funktioniert.

# Characteristics loop
chars = [x.split('_')[1] for x in bs.attr.keys('chr_*')]
checked_chars = []
for c in chars:
    checked = self.get_argument(c, None)
    if checked is not None:
        checked_chars.append(checked)

Dies kombiniert Tornado Templat (jinja2) Feature mit einigen HTML-Code für eine einfache Schnittstelle. Doable & schnell, allerdings nicht die beste Produktionslösung. Hoffe, das hilft!

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top