2017-12-01 15 views

答えて

0

これを行う方法はありません。 別の変数を作成し、それをコンテキストに渡して使用することができます。 Like:

context['result'] = variable.function(parameter) 

あなたの意見では、 テンプレート内:

0

これはDjangoテンプレートでは不可能です。テンプレートデザイナーが足で自分を撃ってしまうのを防ぐため、これは目的に適さないものです。その理由は、テンプレート内の唯一のロジックはプレゼンテーションロジックでなければならず、すべてのビジネスロジックをビューに保持する必要があるということです。一部の人々はそれが十分だと思っている人もいれば、それは少し納得しないと思う人もいます(そのようなダムのテンプレートデザイナーは関数やメソッドを安全に使うほどスマートではありません)。

私は3つの選択肢を考えることができます:

  1. 代わりjinja2を使用しています。
  2. カスタムテンプレートフィルタを作成します。
  3. Djangoデザイナーがあなたがそれを保つと考えているビュー内のすべてのロジックを維持します。

私はそれがalready explained in the docsですので、あなたが代わりにネイティブのDjangoテンプレートのそれに切り替えた場合の問題の例がそのまま動作するため、Jinja2のを使用する方法について説明しません。これは単にJinja2の中で動作します。

{{ variable.function(parameter) }} 

テンプレートフィルタソリューション:まず、あなたがcode layout conventionに従わなければなりません。

# at your_tag_library.py 
@register.filter(name='call_with') 
def apply_callable(callable, arg): 
    return callable(arg) 

は次に、あなたが行うことができますテンプレートに:フィルタ自体がこのようなものになるだろう。もちろん、

{% load your_tag_library %} 

{{ variable.function|call_with:parameter }} 

最後のオプションは、ダニエルの答えから1である - ビューに値を事前に計算し、結果をテンプレートに表示してください:

context['result'] = variable.function(parameter) 

テンプレートには、{{ result }}が必要です。

関連する問題