Как передать логическое значение из javascript в python?

Следующее, кажется, передает строку вместо логического значения. Как передать логическое значение?

$.post('/ajax/warning_message/', {'active': false}, function() {
            return
       });
def warning_message(request):
    active  = request.POST.get('active')
    print active
    return HttpResponse()

Ответ 1

В коде Python сделайте следующее:

active = True if request.POST.get('active') == 'true' else False

Или даже проще:

active = request.POST.get('active') == 'true'

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

Ответ 2

Предполагая, что вы можете отправить логическое значение на сервер как true/false или 1/0, на стороне сервера вы можете проверить оба случая с помощью in:

def warning_message(request):
    active = request.POST.get('active') in ['true', '1']
    print active
    return HttpResponse()

В противном случае, если вы уверены, что ваше логическое значение будет только true/false использовать:

def warning_message(request):
    active = request.POST.get('active') == 'true'
    print active
    return HttpResponse()

Ответ 3

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

Мне нравится использовать библиотеку simplejson.

Специально загружает анализирует естественную форму json JavaScript для нативных типов Python. Таким образом, эта техника может быть использована для более широкого круга случаев. Это даст вам единообразные методы кода, которые легче читать, понимать и поддерживать.

Из документов:

Десериализовать s (экземпляр str или unicode, содержащий документ JSON) в объект Python.

import simplejson as sjson
sjson.loads(var_to_parse)

Или в вероятном сценарии, который вы получаете через передачу параметров:

var_to_parse = request.POST.get('name_of_url_variable') #get url param
    if var_to_parse!= None : #check if param was passed, not required
        parsed_var = sjson.loads(var_to_parse) # loads does the work

Примечание. Импортируйте библиотеки, руководствуясь здравым смыслом, если вы собираетесь их использовать, если в этом нет необходимости.