这是我的代码:
[{{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 代码并不容易。
如果他们应该工作 - 还有其他可能的原因吗?
有这个非常相似的问题,但答案对我不起作用。我正在使用 Django 1.3。
编辑
好的,所以“状态”具有类型类。查看定义,state 指的是最终子类 models.Field 的类:
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 实际上,相关位可能是“状态”类本身:
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__)