web-dev-qa-db-fra.com

Comment accéder aux variables de session dans jinja 2 - Flask

Dois-je passer les variables de session manuellement du flacon à mon HTML ou sont-elles automatiquement envoyées?

Est-ce que je peux faire 

return render_template('index.html')

et accéder à un nom d'utilisateur de variable de session, comme par exemple {{session['username'}} dans le fichier html?

7
bpb101

En python 

session['username'] = 'username'

dans jinja2 vous pouvez aller 

{{session['username']}}
11
bpb101

@ bpb101 est correct sur le format Jinja2 (en laissant toutefois les espaces comme d'autres l'ont mentionné). Dans le modèle HTML/Jinja2, vous pouvez simplement appeler le dictionnaire session sans le transmettre au modèle:

{{ session['username'] }}

Cependant, l'autre exemple, dans le code Python, écraserait la valeur de session['username'] par la chaîne 'username', en raison de l'affectation de variables. Si vous tentiez de définir une variable avec la valeur session['username'], vous utiliseriez:

username = session['username']

Sinon, si vous avez juste besoin de tester ou d'utiliser la valeur pour une autre raison, vous pouvez y accéder directement, par exemple:

if session['username'] == some_value:
    return "The username is", session['username']

J'espère que cela aidera tout nouveau venu dans Flask ou Jinja2 à se demander pourquoi leurs variables de session sont écrasées.

2
user10257507

Si vous souhaitez isoler certaines parties de votre session HTML en utilisant la session, vous pouvez appeler la session directement sur ces éléments:

{% if session['username'] %}
<li>Logout</li>
{% endif %}
1
chikwapuro