Я замечаю, что ваш последний возврат является условным, и на основании моего собственного похожего кода предполагаю, что если ни одна из проверок не сработает, вы захотите продолжить и вернуть что-то еще, возможно, даже не перенаправление ...
Вот как я думаю, я бы это сделал:
def checkForMessage():
if status == 'ACTIVE' and p.result != "0":
return 'Active Message... bla bla bla'
if status == 'TOO MANY FAILURES':
return 'Failed. Foooobarrrrr'
if status == 'DEACTIVATED BY MERCHANT':
return 'Deactivated derpa derp'
return None
msg = checkForMessage()
if msg:
messages.add_message(request, messages.ERROR, _(msg))
return HttpResponseRedirect(reverse('billing_update'))
// ... go on and do some other stuff ...
return direct_to_template('some/template.html', {some: stuff})
Обратите внимание, что функция checkForMessage определена внутри функции представления, поэтому нам не нужно передавать все, что входит в тест, в качестве параметра для нее.(в случае, если число tets много и различно, если им просто требуется статус и некоторая переменная «p», это также может быть объявлено вне функции представления и принимать эти параметры).
Суть в том, чточто альтернативу «провалиться», когда мы вообще не хотим добавлять какое-либо сообщение, можно обработать, возвращая None в методе check и проверяя наличие сообщения в методе view.