Как я могу исправить это дерьмо?

Что я делаю не так?

Проблема: оператор if всегда игнорируется. Оператор else всегда возвращается.

Желаемый результат: Если test == 'True' (я хочу сопоставить с параметром 'Digits'), то переходим к twilio_view3, иначе перенаправляем к twilio_view1.

example.py

import re

def test():
    if re.match(r'99\d{10}')
        return True
    else:
        return False

views.py

from example import test

def twilio_view2(request: HttpRequest) -> HttpResponse:
    digits = request.POST.get('Digits')
    response = VoiceResponse()
    if test == 'True':
        gather = Gather(input='dtmf', action='/twilio_view3', method='POST')
        gather.say('Blah blah blah.')
        response.append(gather)
        return HttpResponse(str(response), content_type='text/xml')
    else:
        response.say('Something other than Blah blah blah.')
        response.redirect("/twilio_view1")
        return HttpResponse(str(response), content_type='text/xml')

ТвиML-ответ:

<Response>
    <Say>Something other than Blah blah blah.</Say>
    <Redirect>/twilio_view1</Redirect>
</Response>

В вашем коде есть несколько ошибок:

  1. test - это функция. Поэтому, когда вы делаете if test == 'True', вы сравниваете функцию со строкой, которая всегда будет False. Вместо этого нужно выполнить if test() == True, чтобы сравнить результат выполнения функции со значением.

  2. Лучше всего сделать if test(), потому что сравнение == True всегда избыточно.

  3. Даже после исправления этого, вы используете re.match() неправильно и получите ошибку. Скорее всего, вам нужно передать строку в test() для сравнения с ней, но я не могу быть уверен без более подробной информации о том, что вы пытаетесь сделать.

В конце концов, лучший способ "исправить это дерьмо" - это изучить Python, проработав учебник. Вам нужно сосредоточиться на том, как работают функции и как передавать аргументы в функцию. Вам также следует изучить разницу между строками, булевыми числами и другими типами данных.

Вернуться на верх