2012-03-12 4 views
3

Web2Pyで部分ビューをとする必要がある場合がありますが、には、という特定の変数を渡す必要があります。ジャンゴでは、それは次のようになります。web2pyの場合にはWeb2Pyに部分ビューを含め、特定の変数を渡すことはできますか?

{% include "image.html" with caption="Me" source="http://example.com/img.png" %} 

を私のような何かを行うことができます。

{{ include "image.html" }} 

をしかしthe documentation内の一部のビューに変数を渡すことについて、単一の言及さえ存在しない(または私はかなり明白な何かが欠けている)。

これは、ビューの複雑さが減り、DRYルールが実装され、ループ内に複雑なコンテンツ(画像、コンテナなど)が表示されるケースがあります。

代わりに独自のタグ/関数を使用する必要はありません - 特定の変数を含む部分的なビューを含めるには、すばやく簡単なものが必要です。同様に、Djangoや他の多くのWebフレームワークで行うことができます。それは可能ですか、Web2Pyのアーキテクチャのせいでそれはむしろ不可能ですか?

これはweb2pyで可能か、ビュー内で使用するために独自のタグを作成する必要があるかどうか教えてください(もしそうなら、最も簡単で簡単な方法は何ですか?)。

ありがとうございました。 the bookから

答えて

5

コントローラから返された変数は、含まれている(拡張されているだけでなく)ビューでも利用できます。だから、あなたが行うことができます:mycontroller.pyで

:/views/mycontroller/myfunc.htmlで

def myfunc(): 
    return dict(caption='Me', source='http://example.com/img.png') 

、その後を:

その場合
{{include 'image.html'}} 

captionsourceは次のようになりますimage.htmlビューにあります。あなたはビューに渡される追加の変数が必要な場合だけ、アンソニーの答え、 に詳述すると

{{caption = 'Me' 
    source = 'http://example.com/img.png'}} 
{{include 'image.html'}} 
+0

おかげで、アンソニー。これは私が必要としていたもので、web2pyの暗黙のナチュラルを忘れてしまった。しかし、私は質問があります。あるコントローラのアクション内で何らかのビューをレンダリング(例えば、AJAXを通す、またはさらなる処理のために)してから、ビュー内で変数を定義すると、アクション本体でアクセスできるようになりますアクションで値を返す前に)?私が前提としているように、どのビューでも再割り当てされた渡された変数は、その後に実行されるどのビューでも値を変更しますか?名前空間はありますか? – Tadeck

+0

いいえ。ビュー内で定義された変数は、ビューをレンダリングするアクションではアクセスできません。 'response.render()'を呼び出すと、新しい環境でビューが実行されるため、コントローラ環境は影響を受けません。また、ビュー内の変数の再割り当てについては正しいです。ビューをレンダリングすると、拡張ビューと組み込みビューの間に名前空間はありません。その理由は、拡張されたビューと組み込みのビューが最初に組み合わされ、次に単一のビューとして実行されるからです(そのため、インクルードまたは拡張の前に定義されたオブジェクトがインクルードビューまたは拡張ビューで使用可能になります)。 – Anthony

2

また コントローラ機能によって返された変数は、関数のメイン ビューではなく、その拡張の全てではないだけで利用可能であり、同様のビューが含まれていることを指摘する価値がある

質問を誤解していない限り、特に変数を渡す必要はありません。代わりに、通常のように使用してください。

0

:代わりに、コントローラからcaptionsourceを返すので、別のオプションは、ちょうどincludeディレクティブの前のビューでそれらを定義することですそれらを復帰命令に含める。 私の現在のプロジェクトでは、ビューに使用する変数を一揃い渡します。

return dict(maxsize=5, message='hello world', fadetimeout=10, warning=0) 

また、ウェブ内の複数のビューで特定の値にアクセスする必要がある場合は、それらをセッションに保存できます。

session.some_var_i_need_in_multiple_views = ['one', 'two', 'three'] 

次にビューにアクセス:

{{=H3(session.some_var_i_need_in_multiple_views[0])}} 
+0

私は本当にあなたがビューで行うことができるものが好きではありません。セッション変数はそこで変更されます。あなたの答えをありがとう、部分的なビューについての質問だった - 私が知っているPythonとPHPフレームワークの大半とは対照的に、変数が暗黙のうちにweb2pyの部分ビューに渡されるのを忘れていました。 – Tadeck

関連する問題