2016-08-16 9 views
0

hello関数への引数としての名前は割り当てられません。ただし、URLに提供されている場合、render_templateの名前は名前の値をとるのはなぜですか?基本的に私の質問は、どの名前がNoneで、どの名前がURLに与えられているかをPythonがどのように知っているかです。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ルートの ''と 'hello()'関数の引数変数 'name'は同じです。 – cuongnv23

+0

はい、それが私が混乱している理由です。なぜなら、もし私が/に行くなら、私はちょうどHello Worldを見るからです!私が/ hello/payamに行くと、Hello Payamが表示されるので、render_templateはname = Noneの場合、名前がpayamであることをどのように見出しますか? –

+1

name = Noneはデフォルトですが、別の引数を指定した場合は/ hello/になりますが、その代わりにそれが使用されます。 – iScrE4m

答えて

2

フラスコは、フレームワークであり、すべての要求処理を行い、シーン(特にwerkzeug)の背後にあるコードがたくさんある、それはあなたのビューを呼び出しますそれから完全な応答を準備します。

答えは、PythonはURLを知らないが、Flaskは、name(デフォルトを上書きするか、またはそれを含まない)のどちらかでview関数を呼び出して呼び出します。

ビュー機能の変数は、同じ名前のテンプレートに渡されます。これは、この行にある2つのnameです。

return render_template('hello.html', name=name) 
関連する問題