Что означает is not None в django / python?

#python #django #django-views

#python #django #django-просмотры

Вопрос:

Я хочу отобразить недопустимое сообщение, когда поле моей html-формы пусто. Но приведенный ниже код запускает «if block», когда поле пустое, и «else block», когда поле не пустое.

Я написал это таким образом, потому что это, похоже, выполняет свою работу. Но я в замешательстве. Разве не должно быть наоборот?

 if(request.POST['amount'] is not None):

   os.remove(os.path.join(settings.MEDIA_ROOT,str(uploaded_file.name) ))
            messages.success(request,('Invalid Field....'))
            return redirect('assignFine')
else:
   form = Fine(amount=request.POST['amount'],numberPlate=num,policeUsername=request.user)
            form.save()
  

Комментарии:

1. Вы проверяли, переходит ли он в else блок, если входные данные действительны?

Ответ №1:

Это условие:

 if request.POST['amount'] is not None:
  

Означает: если параметр существует (не None является), выполните приведенный ниже блок, в противном случае выполните else часть. Чтобы это имело смысл, если amount существует, мы должны создать Fine , в противном случае мы сообщаем об ошибке. Похоже, что ваши условия изменены!

В зависимости от ожидаемых значений amount параметра, я бы также рассмотрел возможность использования этой версии:

 if request.POST['amount']:
  # create fine
else:
  # signal an error
  

Это короче и означает: если amount это не None , или '' , или False , или 0 или любые другие ложные значения в Python, выполните приведенный ниже блок, в противном случае выполните else часть.

Комментарии:

1. более подробный, но также и более точный для многих применений, где могут быть допустимы ложные значения

2. Но если это так, как вы говорите. Тогда не следует запрашивать if. POST[‘amount’] не является none: блок будет выполняться, когда сумма существует?

3. @sayeedk06 о! Теперь я понимаю вашу точку зрения. Я полагаю, что ваши условия изменены! Также проверьте, какое значение поступает в параметр, возможно, это не так None , но это пустая строка. Вот почему я предпочитаю вторую версию в своем ответе.

Ответ №2:

Вы можете использовать приведенную ниже фразу, чтобы проверить, существует ли amount параметр в request.POST :

 if 'amount' in request.POST:
    # Your code
else:
    # Else case
  

Вы можете использовать not in оператор для получения отрицательной фразы if / else:

 if 'amount' not in request.POST:
    # No 'amount' available
else:
    # There is 'amount' parameter
  

[Править]

И чтобы проверить, не является ли значение not empty , False или None , вы можете проверить это следующим образом:

 if 'amount' in request.POST and request.POST['amount']:
    # 'amount' exists, and is not 'empty', 'False', or 'None'
  

Комментарии:

1. А что, если amount есть в словаре, но со None значением?