26

Do I need to pass session variables manually from Flask to my HTML or are they automatically sent in some way?

Can I do

return render_template('index.html')

and access a session variable username, for example, like {{session['username'}} in the HTML file?

colidyre
  • 4,170
  • 12
  • 37
  • 53
bpb101
  • 971
  • 1
  • 9
  • 18

3 Answers3

37

In python

session['username'] = 'username'

in jinja2 you can go

{{session['username']}}
bpb101
  • 971
  • 1
  • 9
  • 18
8

If you want to isolate certain parts of your HTML using session you can call the session directly on those elements:

{% if session['username'] %}
<li>Logout</li>
{% endif %}
Cody Gray - on strike
  • 239,200
  • 50
  • 490
  • 574
chikwapuro
  • 1,328
  • 1
  • 9
  • 10
4

@bpb101 is correct on the Jinja2 format (though left out the spaces as others have mentioned). In the HTML/Jinja2 template you can simply call the session dictionary without passing it to the template:

{{ session['username'] }}

However the other example, in the Python code, would actually overwrite the value of session['username'] with the string 'username', due to variable assignment. If you were trying to set a variable to the value of session['username'] you would use:

username = session['username']

Otherwise if you just needed to test or use the value for some other reason you can access it directly for example:

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

Hopefully that helps for anyone new to Flask or Jinja2 that might wonder why their session variables are being overwritten.