Comment dois-je remplir une balise select avec Flacon?
Je suis en train d'essayer d'accéder à une liste des objets JSON (à partir de mongo) en python pour remplir une liste déroulante à l'aide de flacon de modèles. Par la suite, j'ai besoin d'accéder à l'élément sélectionné. J'ai de la difficulté d'obtenir la liste à remplir. Voici mon code python et le modèle. Quelqu'un peut me pointer dans la bonne direction? Je n'ai pas été en mesure de trouver une bonne documentation sur la façon de remplir le dd liste de ces modèles.
PYTHON:
@app.route('/page', methods=["GET", "POST"])
@login_required
def chooser():
# Option list returns a list of JSON objects
option_list = get_options(g.user)
# {u'_id': ObjectId('52a347343be0b32a070e5f4f'), u'optid': u'52a347343be0b32a070e5f4e'}
# for debugging, checks out ok
print option_list
# Get selected id & return it
if request.form['submit'] == 'Select':
optid = o.optid
resp = 'You chose: ', optid
return Response(resp)
return render_template('chooser.html')
MODÈLE HTML:
{% extends "layout.html" %}
{% block content %}
<h2>Chooser<h2>
<h3><table><form action="" method="POST">
<td>
<label>Select :</label>
<select name="option" width="300px">
{% for o in option_list %}
<option name="{{ o.optid }}" SELECTED>{{ o.optid }}</option>
</select>
</td>
<td>
<input class="button1" type="submit" value="Select">
</td>
{% endfor %}
</form></table><h3>
</div>
{% endblock content %}
La terminologie utilisée ici est un peu déroutant. Techniquement, vous accédez à des objets JSON, mais ce n'est qu'une partie du chemin que MongoDB transferts de ses données. Les résultats sont sérialisés en Python dictionnaires, et que vous utilisez les dictionnaires. En disant que vous êtes en utilisant des objets JSON vous faire paraître comme vous voulez remplir le
<select>
balise à l'aide de Javascript (qui fait en fait utiliser des objets JSON). Aussi, vous n'êtes pas accès à la liste, vous essayez de créer. J'ai changé le titre pour tenir compte de cette information.OriginalL'auteur RandallShanePhD | 2013-12-07
Vous devez vous connecter pour publier un commentaire.
Il y a quelques choses qui cloche ici:
Tout d'abord, lorsque vous appelez
render_template('chooser.html')
, vous n'êtes jamais à la réussite de tous les arguments pour le modèle de processus de rendu. Par défaut, Jinja2 ne fait pas d'erreur si un attribut de référence n'est pas trouvé, de sorte que vous n'obtenez pas de message d'erreur. L'essentiel, pour le code dans votre template qui ressemble à ceci:Les entrailles de cette boucle for ne sont jamais rendues parce que vous n'avez jamais préciser ce que
option_list
est. Dans ce cas, Jinja2 sera juste valeur par défaut à une chaîne vide, et puis vous êtes essentiellement en boucle sur les caractères de la chaîne vide (ce qui signifie bien sûr les entrailles de la boucle for ne sont jamais fonctionner).Donc, vous devez spécifier le modèle de ce que la valeur de
option_list
est:L'autre problème, c'est que votre code HTML va être foiré à cause de l'endroit où vous avez mis votre boucle for:
Je pense que vous avez voulu faire ce qui suit:
Voir le le rendu de la partie du tutoriel, ou le Jinja2 documentation pour plus d'info.
OriginalL'auteur Mark Hildreth