私はDjangoテンプレート内でこれを実現したいと思います。 variable
djangoテンプレートでパラメータを持つ変数関数を呼び出す方法は?
{{ variable.function(parameter) }}
この場合のテンプレートにコンテキストを通過した変数、モデルのインスタンスです。 私はさまざまな方法を試みましたが、誰も動作していないようです。
私はDjangoテンプレート内でこれを実現したいと思います。 variable
djangoテンプレートでパラメータを持つ変数関数を呼び出す方法は?
{{ variable.function(parameter) }}
この場合のテンプレートにコンテキストを通過した変数、モデルのインスタンスです。 私はさまざまな方法を試みましたが、誰も動作していないようです。
これを行う方法はありません。 別の変数を作成し、それをコンテキストに渡して使用することができます。 Like:
context['result'] = variable.function(parameter)
あなたの意見では、 テンプレート内:
これはDjangoテンプレートでは不可能です。テンプレートデザイナーが足で自分を撃ってしまうのを防ぐため、これは目的に適さないものです。その理由は、テンプレート内の唯一のロジックはプレゼンテーションロジックでなければならず、すべてのビジネスロジックをビューに保持する必要があるということです。一部の人々はそれが十分だと思っている人もいれば、それは少し納得しないと思う人もいます(そのようなダムのテンプレートデザイナーは関数やメソッドを安全に使うほどスマートではありません)。
私は3つの選択肢を考えることができます:
私はそれが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 }}
が必要です。