techhighlands
techhighlands

Reputation: 972

flask argument in render_template

The name as an argument to hello function is assigned None, but why the name in render_template will take the value of the name if provided in the url? Basically my question is how Python knows which name is None and which name is given in the url?

 from flask import render_template
 @app.route('/hello')
 @app.route('/hello/<name>')
 def hello(name=None):
      return render_template('hello.html', name=name)

the hello.html is:

<!doctype html>
<title>Hello from Flask</title>
{% if name %}
<h1>Hello {{ name }}!</h1>
{% else %}
<h1>Hello, World!</h1>
{% endif %}

Upvotes: 2

Views: 5359

Answers (1)

VPfB
VPfB

Reputation: 17247

Flask is a framework and there is a lot of code behind the scenes (especially werkzeug) which does all the request processing, then it calls your view function and then it prepares a complete response.

So the answer is, that Python does not know the URL, but Flask does and calls your view function either with the name (overwriting the default None) or without it.

The name variable of the view function is passed to the template under the same name. Those are the two names in this line:

return render_template('hello.html', name=name)

Upvotes: 4

Related Questions