0

コンテナのサブクラスのインスタンスであるPythonオブジェクトがあります。したがって、このオブジェクトはx、のように動作できますx['name']。このオブジェクトには、たとえば、メソッドもありますx.bar()

x.barDjangoテンプレートから呼び出すにはどうすればよいですか?テンプレートx.barでは、常にx['bar']最初に評価されます。これにより、が得られNoneます。

私が考えることができる最善の方法はx、を持たないオブジェクトシャドウイングを作成することgetitemです。しかし、私はできませんdelattr __getitem__

より良いアイデアはありますか?これらの呼び出しの結果をコンテキストまたはテンプレートタグで手動で渡すことはできません。

ありがとう。

4

1 に答える 1

1

これは、Djangoテンプレートが式の評価を行う方法の根本的な欠陥です。回避策については、テンプレートタグ{% expr -arbitrary-python-expression- %}を確認してください。たとえば{% expr x.bar(1,2,3) as snort %}、現在のコンテキストで。という名前の新しい変数を提供しますsnort

または、 Jinja2テンプレートを試すこともできます。それらはDjangoに非常に近いですが、完全なPythonを許可します。

注:Jinja2はDjangoと同じテンプレートシステムではありません。テンプレートシステムに依存するページ埋め込みのdjangoアプリを使用している場合、これにより破損する可能性があります。{% expr %}これはタグには当てはまりません。

于 2012-12-12T19:12:30.243 に答える