1

動的な数のウィジェットを備えたWebサイトがあり、ピラミッドビュー(views.py)がページを呼び出し、データを送信します。

View.py:

@view_config(route_name='home', renderer='templates/home.pt')
def home_view(request):
    widgets = #do sql stuff#
    return widgets

layout.t:

<html>
 <head>
  <title>Title</title>
 </head>
 <body>
  <div  class="container">
    <div tal:omit-tag="" metal:define-slot="content"/>
  </div>
  <script src="//ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
  <more tal:omit-tag metal:define-slot="js-more"></more>
 </body>
</html>

home.pt:

<div metal:fill-slot="js-more">
 <script src="pagespecific.js"></script>
</div>
<div metal:use-macro="load: layout.pt">
  <div metal:fill-slot="content">
   Page Content!!!!
  </div>
  <div class="widgets-stuff">
    <div class="modulecontent" tal:repeat="_widgets widgets">
     <div tal:omit-tag="" metal:use-macro="load: widgets/${_widgets.template}.pt" />
    </div>
  </div>
</div>

widgetSample.pt:

<div class="morewidgetstuff">
 A widget!
</div>

ウィジェットテンプレートに新しいjsを追加できるようにしたかったのですが、次のようになります。

widgetSample.pt:

<div metal:add-to-slot="js-more">
 <script src="widgetspecific.js"></script>
</div>
<div class="morewidgetstuff">
 A widget!
</div>

ps:これはあまり意味がないことを私は知っています、これは単なる例です

4

1 に答える 1

0

すべてのウィジェットをレンダリングするテンプレートのスロットを埋める必要があります (したがって、ウィジェットに必要な JavaScript を追加します) (あなたの場合はhome.pt)。

同じリソースを必要とする 2 つのウィジェットがある場合、それを含めるのは 1 回だけにする必要があるため、これは合理的です。すべてのウィジェットのセットを取得したレベルで、一意のセットを決定する方がはるかに簡単です。

于 2013-03-18T09:30:41.523 に答える