我正在寻找一种方法来返回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
,我总是会结束如何解决此问题?
答案 0 :(得分:2)
在Python中,非空字符串也计算为True
:
>>> bool('foo')
True
>>> bool('')
False
因此,无论您的time_remaining
函数返回什么,它都会在True
语句中被评估为if
。
你可能想要使用类似的东西:
time_remaining() == True
如果没有时间,或者甚至让time_remaining
返回False
或None
(特别是如果你只想在你的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))