문제

나는 돌아올 방법을 찾고있다 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이 진실 대신 문자열을 반환하더라도 항상 끝납니다.

이 문제를 해결하려면 어떻게해야합니까?

도움이 되었습니까?

해결책

파이썬에서 비 비유 문자열도 AS를 평가합니다 True:

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

그래서 당신의 것이 무엇이든 상관 없습니다 time_remaining 함수 리턴은 항상 평가됩니다 True 당신의 if 성명.

당신은 아마도 다음과 같은 것을 사용하고 싶을 것입니다.

time_remaining() == True

또는 아마도 가질 수도 있습니다 time_remaining 반품 False 또는 None 남은 시간이없는 경우 (특히 출력 만 사용하는 경우 time_remaining 당신의 if 성명).

다른 팁

time_remaining() == True:

트릭을하는 것 같습니다 :) 그것은 항상 그것이 정확히 무슨 일이 일어나고 있는지에 대한 설명을 항상 반환한다고 생각했습니다.

당신의 time_remaining 함수는 항상 평가하는 값을 반환합니다 True 에서 if 성명. 그래서 possible 언제 까지나 그럴거야 True.

두 번째 코드 블록에 추가 로직을 추가하여 시간 델타의 값을 테스트하는 것과 같이 기대하는 동작을 수행하십시오.

기능 출력은 빈 출력을 말하기 위해 특별한 값 '없음'이있는 동일한 유형이어야합니다 (이 명령문에 대한 참조를 찾을 수는 없지만 ...).

그래서 당신은해야합니다 :

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))
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top