2012-01-23 12 views
18

フラスコに.net MVC 3の部分図がありますか?
ウィジェットを1つのビューページに埋め込み、そのウィジェットに独自のロジックがあります。MVC 3のようなフラスコ部分図

+0

ウィジェットコードを関数に記述し、その関数をビューから呼び出すことはできますか? –

+0

@Alex Morega jinja2ビューテンプレートでfunctinを呼び出す方法は? – magicshui

+0

@magicshui引数としてrender_templateに渡します。 – plaes

答えて

23

Jinja2のテンプレートの内容を含めるには、いくつかの方法があります。

include文は(デフォルトでは現在のコンテキストで)供給ビューをレンダリングします:

{# In your_view_template.jinja #} 
{# ... your code ... #} 
{% include "widgets/your_widget.jinja" %} 
{# ... your code ... #} 

あなたはまたmacrosを定義することができますし、ビューテンプレートにimportそれらを:

{# In your_view_template.jinja #} 
{% import "widgets/your_widget.jinja" as your_widget %} 
{# ... your code ... #} 
{{ you_widget.render(your, important, variables, etc.) }} 
{# ... your code ... #} 

両方importおよびincludeは、変数を使用することができますので、このようなものが可能です:

# In your view 
if complex_conditions.are_true(): 
    widget = "widgets/special_custom_widget.jinja" 
else: 
    widget = "widgets/boring_widget.jinja" 
render_template("your_view.jinja", widget=widget) 

{# In your_view_template.jinja #} 
{% include widget %} 
{# 
import widget as sidebar_widget 
{{ sidebar_widget.render() }} 
would also work 
#} 

は、これらの両方のMVCの部分図と同様に機能(少なくとも、だけれども私はそれらを理解として)

代わりに、あなたのウィジェットでは、ACLへのアクセスを必要とする場合テンプレートレイヤーでは使用できない情報があります。includeimportを利用するためにビューを書き直すことはできません。@ [Alex Morega]の提案を受け取り、変数として呼び出し可能にテンプレートに渡してレンダリングできますそれはそこにある。

# In your view 
render_template("your_view.jinja", widget=you_callable, etc, etc, etc) 

{# In your_view_template.jinja #} 
{# ... your code ... #} 
{{ widget() }} 
{# Or, if you are returning HTML that is not a Markup construct #} 
{{ widget() | safe }} 
{# ... your code ... #} 

あなたはさえtemplate loader独自に作成し、ほとんどに応じて、異なるテンプレートを読み込むことができます。しかし、それは間違いなくこの場合には残酷になるでしょう。

関連する問題