2016-08-16 3 views
0

Имя в качестве аргумента функции hello назначается None, но почему имя в render_template примет значение имени, если оно указано в URL-адресе? В основном, мой вопрос заключается в том, как Python знает, какое имя None и какое имя указывается в URL-адресе?аргумент колбы в render_template

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

hello.html является:

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

С кодом вы всегда будете получать 'name = None'. '' в URL-адресе и переменной аргумента 'name' в функции' hello() 'совпадают. – cuongnv23

+0

Да и вот почему я смущен, потому что, если я пойду/привет, я просто вижу Hello World! но если я перейду к/hello/payam, тогда я увижу Hello Payam, так как render_template узнает, что имя является payam, если name = None? –

+1

name = None - это по умолчанию, но если вы предоставите ему другой аргумент, перейдя к/hello/, вместо этого это займет. – iScrE4m

ответ

2

Колба является рамочным, и есть много кода за кулисами (особенно werkzeug), которая выполняет всю обработку запроса, затем вызывает Ваше мнение и затем он готовит полный ответ.

Так что ответ Python не знает URL, но Flask делает и вызывает вашу функцию просмотра либо с помощью name (перезаписывая значение по умолчанию None), либо без него.

Переменная функции вида передается в шаблон под тем же именем. Это два name s в этой строке:

return render_template('hello.html', name=name) 
Смежные вопросы