Pythonのフレームワークがコントローラーから辞書を返すのはなぜですか?
-
10-07-2019 - |
質問
なぜ(たとえばweb2py)変数ではなく辞書のコントローラーからデータを返すのですか(Railsを参照)?
例:
return dict(sape=4139, guido=4127, jack=4098)
代わりに(Railsが行う方法です)
@var1 = "jello"
@var2 = "hihi"
ディクショナリを使用すると、プレーン変数(速度/コード単位)よりも利点がありますか?
更新:上記の方法は、実際には辞書を作成するための正しい方法です(少なくともPython 2.6.1では)。他の方法(多くの人が正しいと言っている)
return {"var1": "jello", "var2": "hihi"}
Pythonフレームワークではあまり使用されません。
Pythonのドキュメントから: "キーが単純な文字列の場合、キーワード引数を使用してペアを指定する方が簡単な場合があります:"
dict(sape=4139, guido=4127, jack=4098)
解決
主な利点は、これがPythonでa)単一の値よりも多く を返す唯一の方法であり、b)その値に名前を付けることです。他のオプションは、クラスを使用する(追加コード)、タプルを返す(名前なし、したがって値にアクセスするためにインデックスを使用する必要がある)か、おそらく誰もが返すことを意味する単一の値のみを返すことを許可することです辞書が最も簡単なソリューションであるためです。
また、いくつかのメソッドをラップして、結果を結合/マージすることもできます。最後に、コールごとに値/名前のペアの異なるセットを簡単に返すことができます。たとえば、オプションの値を省略したり、追加のヒントを返したりできます。
他のヒント
必要に応じてローカル変数を使用できます:
def hello():
var1 = "whatever you like"
var2 = "another value"
return locals() # or vars()
hello.html
:
<html><body>
<p>var1 {{=var1}}</p>
<p>var2 {{=var2}}</p>
</body></html>
web2pyでのHTTPリクエスト &quot; / app / c / f&quot;への呼び出しにマッピングされます ファイル内の関数f()(コントローラー) アプリケーション&quot; app&quot;のc.py。の ファイルc.pyはPythonで書かれています。の 関数f()の出力は 文字列(この場合は返されます)、 または変数のセット(として実装されます Python辞書)。後者では 変数がにレンダリングされる場合 HTMLと呼ばれるファイルc / f.htmlによる 表示。
良い点は、Jinja2のようなテンプレートエンジンがオブジェクトと辞書を同様に処理することです。したがって、次の場合:
d = {'color': 'red'}
o = Color(red)
これらはすべてテンプレート構文で機能します:
d.color d['color'] o.color o['color']