python タグ - モデル内の関数を呼び出すdjangoテンプレートシステム




3 Answers

テンプレートからパラメータを持つ関数を呼び出すことはできません。 これはビューでのみ行うことができます。 あるいは、次のようなカスタムテンプレートフィルタを記述することもできます。

@register.filter
def related_deltas(obj, epk):
    return obj.get_related_deltas(epk)

これでテンプレートでこれを行うことができます:

{% for i in channel_status_list %}
  {{ i|related_deltas:3 }}
{% endfor %}
作成 引数

モデルの関数を以下のようなテンプレートで呼びたいと思っています:

class ChannelStatus(models.Model):
 ..............................
 ..............................

    def get_related_deltas(self,epk):
        mystring = ""
        if not self.get_error_code_delta(epk):
            return mystring
        else:
            for i in self.get_listof_outage():
                item = i.error_code.all()
                for x in item:
                    if epk == x.id:
                        mystring= mystring +" "+str(i.delta())
        return mystring         

テンプレートから呼び出す場合は、レンダリング中にchannel_status_listを次のように渡します。

channel_status_list = ChannelStatus.objects.all()

{% for i in channel_status_list %}
  {{ i.get_related_deltas(3) }}
{% endfor %}

これは機能しません、私は何も消費する関数を呼び出すことができますが、それがパラメータを持っている場合、何をするかを見つけることはできません。

乾杯




あらゆる場所で実行されているプロパティがあまりにも多く見つかったり、他のすべてのメソッドのテンプレートフィルタがある場合は、IRCで@FunkyBobに感謝の意を表します。 それはちょっとうまく、ええと、ファンキーですが、それはある種のケースでいいです。

  class MethodProxy(object):
        """For consolidating into 1 method the calling of methods with various single args
        (suitable dictionary keys)

        class MyModel(models.Model):
            ...

            def magic(self, value):
                # Free the ponies

            def thing(self):
                return MethodProxy(self.magic)

        # Usage
        >>> m = MyModel()
        ...
        >>> m.thing['value'] == m.magic('value')

        # template
        {{ m.thing.value }}

        """

        def __init__(self, method):
            self.method = method
        def __getitem__(self, key):
            return self.method(key)



別のオプションは、プロパティを定義することです。 http://adam.gomaa.us/blog/2008/aug/11/the-python-property-builtin/参照してhttp://adam.gomaa.us/blog/2008/aug/11/the-python-property-builtin/

あなたは、あなたが望むものを何でもできるくらいの機能を書いています。 あなたはそれを読み取り専用のプロパティにします。 テンプレートからプロパティを呼び出します。

Etvoilà!!!!




Related