2015-04-04 6 views
10

Ich verwende flask/jinja, um eine einfache Webanwendung zu erstellen. Ich habe eine Tabelle mit Datensätzen, die aus einer db-Tabelle stammt und von einer Webseite aufgerufen wird, die die Liste der Datensätze lädt. In jeder Zeile befindet sich eine Dropdown-Liste (mit dem HTML-Tag select) für eine Spalte.Setzen Sie den Standardwert für das ausgewählte HTML-Element in der Jinja-Vorlage?

Ich weiß, dass der folgende Code nicht tut, was sein soll, derzeit die letzte Option (vierte) wird automatisch wegen des ausgewählten Tags ausgewählt. Ich habe es verlassen, um zu zeigen, was ich versuche zu implementieren.

Idealerweise möchte ich, dass der Status des aktuellen Datensatzes überprüft wird (rec.status im unten stehenden Code) und in Abhängigkeit davon das entsprechende Element im Dropdown-Menü auswählen.

HTML:

 <tbody> 
      {% for rec in records %} 
     <tr> 
      <td>{{ rec.task }}</td> 
      <td> 
      <select> 
       <option value ="zero" selected={{rec.status==0}}>Zero</option> 
       <option value ="first" selected={{rec.status==1}}>First</option> 
       <option value ="second" selected={{rec.status==2}}>Second</option> 
       <option value ="third" selected={{rec.status==3}}>Third</option> 
      </select> 
      </td> 
      <td><a href={{ "/update_status/"~rec.id}}>Update</a></td> 
     </tr> 
     {% endfor %} 
     </tbody> 

Dank!

Antwort

9

Sie sind auf dem richtigen Weg - aber derzeit drucken Sie selected in allen Optionen in Ihrer Auswahlbox. Sie können nur so etwas versuchen, auf die richtige Option ausgewählt Druck:

<select> 
     <option value="zero"{% if rec.status==0 %} selected="selected"{% endif %}>Zero</option> 
     <option value="first"{% if rec.status==1 %} selected="selected"{% endif %}>First</option> 
     <option value="second"{% if rec.status==2 %} selected="selected"{% endif %}>Second</option> 
     <option value="third"{% if rec.status==3 %} selected="selected"{% endif %}>Third</option> 
    </select> 
+0

Großartig, genau das, was ich brauchte! Vielen Dank! –

2

Für die Zukunft Googler:

Wenn Sie WTForms verwenden und möchten die Standardauswahl in Jinja setzen, könnten Sie träumen dass etwas wie dieses funktionieren könnte:

{{ form.gender(class='form-control', value='male') }} 

aber es nicht. Weder tut default='male' noch selected='male' (zumindest nicht für mich in Jinja 2.8 und WTForms 2.1).

Wenn Sie verzweifelt sind und nicht wollen, es in Ihrem forms.py setzen und nichts dagegen ein wenig hacky bekommen, können Sie dies tun:

{{ form.gender(class='form-control hacky', value=data['gender']) }} 

<script> 
    var els = document.getElementsByClassName("hacky"); 
    for (i = 0; i < els.length; i++) { 
     els[i].value = els[i].getAttribute('value'); 
    } 
</script> 

Dies setzt es auf Seite Last Mit JavaScript können Sie die Standardauswahl im SelectField übergeben, ohne sich mit forms.py herumärgern zu müssen. Es gibt wahrscheinlich einen besseren Weg, dies in Jinja zu tun, aber ich habe es noch nicht gefunden.

Verwandte Themen