3 votes

Python, Flask et modèles jinja - Comment itérer sur un dictionnaire créé côté serveur

J'utilise Flask.

Sur le serveur, lorsqu'une page se charge, je crée un dictionnaire.

@app.route('/edit_creative', methods=["GET", "POST"])
@login_required
def edit_creative():
    if request.method == "POST": 
        pass

    query = """select * from mystable"""
    print query
    rows = execute_query(query,select=True)
    creative_handler={}
    for row in rows:
        j = row[2].strip("'")
        j = json.loads(j)
        creative_handler[row[1]]=j

    return render_template("edit_creatives.html",title = 'Edit Creative')

Du côté client, je veux itérer sur le hachage :

{% for crid, object in creative_handler.iteritems() %}

{{ crid }}<br>

{% endfor %}

Sur la page, j'obtiens cette erreur

UndefinedError: 'creative_handler' is undefined

Alors comment utiliser les modèles Jinja pour itérer sur un hachage créé côté serveur ?

6voto

Martijn Pieters Points 271458

Vous devez passer creative_handler au modèle :

return render_template("edit_creatives.html", title='Edit Creative', creative_handler=creative_handler)

3voto

Samy Vilar Points 4539

Vous devez passer la ou les variables que vous voulez utiliser dans le modèle.

>>> from flask import render_template
>>> help(render_template)
render_template(template_name, **context)
    Renders a template from the template folder with the given
    context.

    :param template_name: the name of the template to be rendered
    :param context: the variables that should be available in the
                    context of the template.

donc return render_template("edit_creatives.html",title = 'Edit Creative', creative_handler = creative_handler)

0voto

Paul Collingwood Points 6700

Essayez

return render_template("edit_creatives.html",title = 'Edit Creative', creative_handler = creative_handler)

Si le creative_handler contient quand même vos données.

Vous devez en fait passer l'objet au modèle pour qu'il soit visible et lui donner un nom que vous utiliserez ensuite dans le modèle. Pour information, le code n'est pas exécuté côté client, il est construit dans votre application puis envoyé au client. Il voit simplement le HTML qui résulte de la boucle, etc.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X