18

以下似乎传递了一个字符串而不是一个布尔值。我将如何传递布尔值?

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

3 回答 3

57

在您的 Python 代码中执行以下操作:

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

或者更简单:

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

请注意,该get()函数将始终返回一个字符串,因此您需要根据您需要的实际类型对其进行转换。

于 2012-05-21T22:50:54.610 回答
7

假设您可以将布尔值作为true/falseor发送到服务器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()
于 2012-05-21T22:49:29.077 回答
1

Oscar 的答案是 1-liner,我不想从中得到什么,但是比较字符串并不是最干净的方法。

我喜欢使用simplejson库。专门加载将 JavaScript 的自然 json 形式解析为原生 Python 类型。因此,这种技术可以用于更广泛的案例。

这将为您提供更易于阅读、理解和维护的统一代码技术

从文档:

将 s(包含 JSON 文档的 str 或 unicode 实例)反序列化为 Python 对象。

import simplejson as sjson
valid_python_var = sjson.loads(json_str_to_parse)

或者在您通过参数传递接收它的可能情况下:

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

注意:使用常识导入库,如果您打算在不需要时使用它们。

于 2018-06-04T07:14:44.613 回答