14

Pyramidのテンプレートコンテキストに相当するものは何ですか?

ピラミッドのIBeforeRenderイベントはこれと関係がありますか?公式ドキュメントを確認しましたが、IBeforeRenderイベントが正確に何であるかを理解するのは困難です。

4

6 に答える 6

11

Pyramidはすでにtmpl_contextRequestオブジェクトを提供しているので、非常に簡単に、BeforeRenderイベントをサブスクライブしてレンダラーグローバルに追加する必要があります。

def add_renderer_globals(event):
    event['c'] = request.tmpl_context
    event['tmpl_context'] = request.tmpl_context

config.add_subscriber(add_renderer_globals, 'pyramid.events.BeforeRender')

今後、リクエストを受け取ったときにコードでパラメータを設定できます。

request.tmpl_context.name = 'Bob'

その後、テンプレートはname変数を参照する場合があります。

${ c.name }
于 2011-04-12T15:25:59.357 に答える
6

代わりに、すべてのテンプレートで使用できる変数を詰め込むことができる「グローバルバッグ」を期待している場合は、IBeforeRenderに関する質問が適切です。

from pyramid.events import subscriber
from pyramid.events import BeforeRender

@subscriber(BeforeRender)
def add_global(event):
    event['name'] = 'Pyramid Developer'

Configuratorをセットアップするときにグローバルを追加する別の方法もあります。完全な情報は、http://docs.pylonsproject.org/projects/pyramid/en/latest/narr/hooks.html#using-the-before-render-eventで確認できます。

于 2011-04-12T14:34:21.200 に答える
2

上記のソリューションは、Pylonsテンプレートコンテキストの動作を正確にコピーしていないように思われます。aPylonsでページ要求をレンダリングし、コンテキストに値を追加するcと、テンプレートでとしてアクセスできますc.a。ただし、別のリクエストをレンダリングすると、このキー/値は削除されます。

上記のピラミッドソリューションは、別の動作を示しています。キー/値c.aはテンプレートコンテキストに残ります。場合によっては、これは望ましくありません。この違いを修正するための提案はありますか?

于 2011-11-29T14:18:22.327 に答える
1

Pyramid doesn't really expose the "template context" to the developer (although it is used internally in the various template engine bindings for Pyramid).

Normally if you want to stuff something into "c" for use inside a template you simply pass it as a keyword argument to the render_to_response() call or as part of the dict that you return with a predefined renderer.

So to do something similar as http://pylonsbook.com/en/1.1/using-view-templates.html#using-the-template-context-c-global you would do:

@view_config(renderer="greeting.mako")
def index(request):
    return {'name': 'Pyramid Developer'}

And greeting.mako :

<html>
<head>
    <title>Greetings</title>
</head>
<body>
    <h1>Greetings</h1>
    <p>Hello ${name}!</p>
</body>
</html>
于 2011-04-12T14:30:54.917 に答える
0

ピラミッドクックブックのパイロンマジックグローバルセクションから:

Pylonsには、現在のリクエストの状態データを含むいくつかのマジックグローバルがあります。最も近いピラミッドの同等物は次のとおりです。

(...)

pylons.tmpl_context

リクエストローカルデータのスクラッチオブジェクト。通常、変数をテンプレートに渡すために使用されます。Pyramidでは、変数のdictを返し、レンダラーにそれらをテンプレートに適用させます。または、ビューコードで自分でテンプレートをレンダリングすることもできます。

ビューがメソッドの場合、インスタンス変数を設定することもできます。ビューインスタンスはview、テンプレートのように表示されます。これには2つの主な用途があります。1つは、サイトテンプレートの変数を設定することです。そうしないと、すべてのreturndictに含まれている必要があります。2つ目は、HTMLレンダリングに固有の変数の場合、ビューがHTMLレンダラーと非HTMLレンダラー(JSONなど)の両方に登録されている場合です。

Pyramidには、に「tmpl_context」のポートがあります。request.tmpl_contextこれは、テンプレートにとして表示されcます。ただし、Pyramid-Pylonsユーザーの間で流行することはなく、文書化されていません。

于 2016-02-16T21:47:48.007 に答える
-1

テンプレートとビューの間で変数を便利にやり取りするためのグローバルディクショナリを探している場合は、pyramid.request.TemplateContextを使用してください

テンプレートページ:

<%!
    from pyramid.request import TemplateContext as c
    c.foo = 123
%>

次に、同じ方法でビューにTemplateContextをインポートすることにより、変数にアクセスできます。

from pyramid.request import TemplateContext as c

これは、多かれ少なかれパイロンのtmpl_contextと同等である必要があります。

于 2011-08-05T21:05:44.260 に答える