gpt4 book ai didi

python - 可以在 Django {% ifequal %} 表达式中使用带有查找的变量吗?

转载 作者:行者123 更新时间:2023-12-01 06:01:06 25 4
gpt4 key购买 nike

这是我的代码:

[{{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 代码并不容易。

如果它们应该工作 - 还有其他可能的原因吗?

this very similar question但答案对我不起作用。我正在使用 Django 1.3。

编辑

好的,所以“状态”具有类型类。查一下定义,state指的是一个类,它最终是models的子类。字段:

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'

鉴于此 - 我实际上不确定如何在模板系统中获取真实的字符串值。请原谅我的新奇。

编辑2实际上,相关位可能是“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__)

最佳答案

对象的字符串表示形式与其实际含义之间存在差异。您的 state 属性似乎返回一个其 unicode 表示形式为 InProgress 的对象,但这并不意味着它实际上等于 "InProgress" 。例如,如果 state 是另一个模型的外键,则情况如此 - 在这种情况下,您只需向查找添加另一个级别即可获取返回该状态的实际字段。

更新后编辑不幸的是,我认为您已经将自己逼入了困境。由于没有包含字符串形式的状态的实际实例属性,因此无法通过字符串比较来获取它。

我想到了几种可能性。一种是将所有可能的 State 子类传递给模板上下文(可能通过上下文处理器),之后您将能够将您的 state 与实际对象进行比较。这太可怕了。

另一种方法是在 State 类上或可能在模型上添加一个函数,该函数以字符串形式获取状态。这可能与现有的 __unicode__ 方法一样简单(您实际上不能使用它,因为模板语言禁止访问以下划线开头的属性)。然后您可以执行 ifequal foo.bar.0.state.as_string "InProgress" 或其他操作,这将调用 as_string() 方法,并且您的比较将会成功。

关于python - 可以在 Django {% ifequal %} 表达式中使用带有查找的变量吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10395106/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com