Вопрос

Я ищу способ вернуться 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_Remaing возвращает строку вместо истины

Как я могу решить эту проблему?

Это было полезно?

Решение

В непустых струнах Python также оценивается как 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.

Добавьте немного дополнительной логики во второй кодовой блок, чтобы сделать ожидаемое поведение, например, тестирование значения Delta Time.

Выходы функций должны быть одинакового типа, со специальным значением «нет», чтобы сообщить пустому выводу (хотя я не могу найти никаких ссылок для этого оператора ...).

Итак, вы должны сделать:

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