これが私のコードです:
[{{thing.syncedthing_set.all.0.state}}]
{% ifequal thing.syncedthing_set.all.0.state "InProgress" %}
It worked
{% endifequal %}
結果:
[InProgress]
つまり、変数ルックアップは機能しますが、「ifequal」テストに合格していません。変数ルックアップがサポートされていない以外に、これが機能しない理由は考えられません。
2007年から、当時はサポートされていなかったというメーリングリストメッセージがあります:https ://groups.google.com/forum/?fromgroups#!topic / django -users / oU1im3UTcLc-これはまだ当てはまりますか?
もしそうなら、何か良い回避策はありますか?この場合、テンプレートを呼び出すPythonコードを変更するのは簡単ではありません。
それらが機能する必要がある場合-他の考えられる原因はありますか?
これと非常によく似た質問がありますが、答えは私にはうまくいきません。私はDjango1.3を使用しています。
編集
さて、「状態」には型クラスがあります。定義を調べると、stateは、最終的にモデルをサブクラス化するクラスを参照します。フィールド:
class FSMField(models.Field):
__metaclass__ = models.SubfieldBase
states = {}
""" Contains { 'Statename': StateClass, ... }"""
def __init__(self, *args, **kwargs):
kwargs.setdefault('max_length', 50)
super(FSMField, self).__init__(*args, **kwargs)
def to_python(self, value):
if isinstance(value, State):
return value
return self.__class__.states.get(str(value))()
def get_prep_value(self, value):
return str(value)
def get_internal_type(self):
return 'CharField'
それを考えると、テンプレートシステムで実際の文字列値を取得する方法が実際にはわかりません。私の許しを許してください。
EDIT2実際には、関連するビットはおそらく「State」クラス自体です。
class State(object):
""" A simple finite statement machine abstract class, with on_entry and on_exit events."""
def __unicode__(self):
return "%s" % (self.__class__.__name__)
def __str__(self):
return "%s" % (self.__class__.__name__)