Reputation: 972
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
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 name
s in this line:
return render_template('hello.html', name=name)
Upvotes: 4