2012-02-15 6 views
2

私は以下のようにしたいと思います。ピラミッドのいくつかのビューからレンダリングされたコンテンツを1つのベーステンプレートに注入する

は、私は、次のルートが設定されています:

config.add_route('home', '/') 
config.add_route('foo', '/foo') 

次のビュー:

@view_config(route_name='home', renderer='templates/home.pt') 
def home_view(request): 
    return {...} 

@view_config(route_name='foo', renderer='templates/foo.pt') 
def foo_view(request): 
    return {...} 

基本テンプレート 'テンプレート/ base.ptは' あり:今

<!DOCTYPE html> 
<html> 
<head></head> 
<body> 
    Welcome ${user_id}<br> 
    <a href="/foo">Foo</a><br> 
    <div id="content"> 
     <!-- Inject rendered content here from either/or /foo --> 
    </div> 
</body> 
</html> 

を私の見解では、id "content"を持つdivに次のコンテンツを挿入したいと考えています:

0彼らはbase.ptに、独自のテンプレート(home.pt、foo.pt)を注入できるように、どのように私は home_viewfoo_view上記の変更については行くだろう
<!-- templates/home.pt --> 
<div id="home-content">Home content</div> 

<!-- templates/foo.pt --> 
<div id="foo-content">Foo content</div> 

?何とか私は$ {user_id}のようなデータもbase.ptに転送する必要があります。私はビューを定義するときにラッパー引数で遊んでいたが、それがどのように動作するか把握できなかった。

答えて

3

これはいくつかの方法で実現できます(例:Using ZPT Macros in PyramidまたはChameleon documentation introduction)。あなたの単純なケースで

、私はこれが最速の方法だと思う:最初にあなたのbase.ptファイルを変更します。

<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml" 
     xmlns:tal="http://xml.zope.org/namespaces/tal" 
     xmlns:metal="http://xml.zope.org/namespaces/metal"> 
<head></head> 
<body> 
    Welcome ${user_id}<br> 
    <a href="/foo">Foo</a><br> 
    <div id="content"> 
     <tal:block metal:define-slot="content"> 
     </tal:block> 
    </div> 
</body> 
</html> 

これは、カメレオンマクロのcontentスロットを定義します。

あなたfoo.pt次のようになります。

<metal:main 
    xmlns:tal="http://xml.zope.org/namespaces/tal" 
    xmlns:metal="http://xml.zope.org/namespaces/metal" 
    use-macro="load: base.pt"> 
    <tal:block metal:fill-slot="content"> 
     <div id="foo-content">Foo content</div> 
    </tal:block> 
</metal:main> 

use-macro="load: base.ptライン。 home.ptは同じパターンに従う必要があります。 user_idや他のテンプレート変数は、マクロが利用できるので、たとえば、あなたがuser_idUSERに、/fooがレンダリングされます設定されている場合:

多かれ少なかれexacly私が欲しいものに見える
<!DOCTYPE html> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head></head> 
<body> 
    Welcome USER<br> 
    <a href="/foo">Foo</a><br> 
    <div id="content"> 
     <div id="foo-content">Foo content</div> 
    </div> 
</body> 
</html> 
+0

。私は別のビューメソッドは、いくつかの一般的なメソッドからベースディクテーションを取得し、返す前に余分なデータを追加する必要があると思いますか? (base.ptを使用するすべてのテンプレートは、base.ptがレンダリングするのと同じ基本データを持つ必要があるため、この例ではuser_idのみですが、私の実際のbase.ptでは一般的なデータが多くなります) – ralphtheninja

+0

@MagnusSkog – DzinX

+0

コミュニティから現金を引き出すことができてうれしいです:)ありがとう! – ralphtheninja

関連する問題