python django返回不同的变量

时间:2013-12-03 14:08:32

标签: python django templates

我正在寻找一种方法来返回True或字符串,然后使用该信息来显示或不显示。这是我的代码:

def time_remaining(self):
    timer = self.timer
    now = datetime.datetime.utcnow().replace(tzinfo=utc)
    if timer < now:
        return True
    else:
        #Returns a timedelta in string
        return game_logic.timedelta_format(timer - now)

然后我使用:

if time_remaining():
    possible = True
else:
    possible = False

return render(request, 'training.html',{'possible': possible})

最后在我的模板中:

{% if possible %}
    <some html>
{% else %}
    <different html>
{% endif %}

不管怎么说,即使time_remaining返回字符串而不是True

,我总是会结束

如何解决此问题?

4 个答案:

答案 0 :(得分:2)

在Python中,非空字符串也计算为True

>>> bool('foo')
True
>>> bool('')
False

因此,无论您的time_remaining函数返回什么,它都会在True语句中被评估为if

你可能想要使用类似的东西:

time_remaining() == True

如果没有时间,或者甚至让time_remaining返回FalseNone(特别是如果你只想在你的time_remaining中使用if的输出{1}}声明)。

答案 1 :(得分:0)

time_remaining() == True:

似乎有诀窍:)想象它总是返回一些东西 一些解释究竟发生了什么仍然是apreciated

答案 2 :(得分:0)

您的time_remaining函数始终返回True语句中评估为if的值。因此possible始终为True

在第二个代码块中添加一些额外的逻辑来执行您期望的行为,例如测试时间增量的值。

答案 3 :(得分:0)

函数输出应该是相同的类型,使用特殊值'None'来告诉空输出(虽然我找不到这个语句的任何引用......)。

所以,你应该这样做:

if timer < now:
    return game_logic.timedelta_format(empty_timedelta) 
else:
    #Returns a timedelta in string
    return game_logic.timedelta_format(timer - now)

或:

time_limit = min(timer, now) #if 'min' applies
return game_logic.timedelta_format(timer - time_limit ) 

或:

if timer < now:
    return None
else:
    #Returns a timedelta in string
    return game_logic.timedelta_format(timer - now)

或返回几个值:第一个告诉结果类型,第二个是实际结果

if timer < now:
    return (True, None)
else:
    #Returns a timedelta in string
    return (False, game_logic.timedelta_format(timer - now))