【问题标题】:How to pass a boolean from javascript to python?如何将布尔值从 javascript 传递给 python?
【发布时间】:2012-05-21 22:46:05
【问题描述】:

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

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

【问题讨论】:

    标签: javascript python


    【解决方案1】:

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

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

    甚至更简单:

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

    注意get()函数总是会返回一个字符串,所以你需要根据你需要的实际类型进行转换。

    【讨论】:

    • 为了便于阅读,我建议以下内容active = request.POST.get('active', False) == 'true'
    【解决方案2】:

    假设您可以将布尔值作为true/false1/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()
    

    【讨论】:

    • 可以提出一个论点,即您应该只选择“true”或“1”并且只接受一个值,但如果你想要两者,这是一个很好的解决方案。
    • @BrendanLong 是的,这也是我的想法。
    【解决方案3】:

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

    我喜欢使用simplejson 库。 具体来说,loads 将 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
    

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

    【讨论】:

      猜你喜欢
      • 2012-10-06
      • 2021-10-29
      • 2013-11-20
      • 1970-01-01
      • 2015-12-22
      • 2016-10-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多