【问题标题】:Python: "is not None" not working as expectedPython:“不是无”没有按预期工作
【发布时间】:2015-07-14 07:42:23
【问题描述】:

在我正在创建的多页调查应用程序中,我有一个 jQuery UI 滑动条,用于为图像提供评级。这会向我的 Python/Django 视图返回一个数值,该值存储在列表 slider_DV_values

在稍后的数据验证调查页面上,参与者有机会通过另一个 jQuery 滑块更新他们为图像分配的评级。

我的问题是,如果参与者更改了 jQuery UI 滑块,它只会返回一个数值。因此,如果参与者不更新原始评级,它将被覆盖,什么都没有。

但是,如果他们确实更新了他们的评级,那么新值就会被存储。

如果我尝试

    elif step == 13:
        slider_value1 = self.request.POST.get('slider_value1')

        print "This is slider_value1", slider_value1

        if slider_value1 is not None:
            slider_DV_values.pop(0)                
            slider_DV_values.insert(0, slider_value1)

slider_DV_values 中存储的原始值仍然被覆盖,什么都没有。

我认为is not None 会阻止使用空值覆盖原始值?这不正确吗?

谁能告诉我如何防止原始值被覆盖,除非新值是更新的数值?

谢谢,加深

编辑

要查看我如何获取我的值,这是我的SurveyWizardView 页面中的 jQuery 滑块栏,其值通过隐藏的表单元素返回

<div class="DV_image_row">          
        <div class="DV_image_left">             
            <img src="{% static "survey/images/pathone/" %}{{first_image}}{{fourth_image}}{{seventh_image}}" height="300" width="250" style="border:1px solid black;" align="middle"/>                          
                      <div class="DV_slider_one" id="one"></div>                        

                        <script >                                                                               
                            $('#submit').click(function() {
                                var username = $('#hidden').val();
                                if (username == "") username = 0;  
                                $.post('comment.php', {
                                    hidden: username
                                }, function(return_data) {
                                    alert(return_data);
                                });
                            });

                            $(".DV_slider_one").slider({            
                                animate: true,
                                range: "min",
                                value: {{first_slider}}{{forth_slider}}{{seventh_slider}},
                                min: -100,
                                max: +100,
                                step: 1,

                                slide: function(event, ui) { 
                                  $("#slider-result_left").html((ui.value > 0 ? '+' : '') + ui.value);

                                  if($(this).attr("id") ==  "one")
                                      $("#hidden2").val((ui.value > 0 ? '+' : '') + ui.value);
                                }
                            });

                        </script>   


                    <div id="slider-result_left">{{first_slider}}{{forth_slider}}{{seventh_slider}}</div>
                    <input type="hidden" name="slider_value1" id="hidden2"/>        


      </div> 

【问题讨论】:

  • is not None 检查变量的类型,除非变量直接来自python,否则它不太可能没有。更有可能是一个空字符串。
  • 你的意思是它被覆盖为空字符串?如果是,那么您应该尝试if slider_value1 != ''
  • @akshay 工作完美,如果您将解决方案写成答案,我将很乐意接受。

标签: python django python-2.7 django-views


【解决方案1】:

您可能想尝试简单的 if slider_value1 != '' 。这是比if not slider_value1 更好的选择,因为后者会屏蔽0,这也是您可能不想做的。

【讨论】:

    【解决方案2】:

    "" is NoneFalse

    None is NoneTrue

    也许你只想要if not slider_value1 :,这对于任何虚假值都是正确的(空字符串、空列表、空元组、false、0、None 等)

    【讨论】:

    • Only None is None is True 听起来很有趣
    • 我想我明白你的意思,正如@akshay 指出的那样,我得到了一个返回的空字符串,它不是“None”,因此我的 if 语句不起作用。我尝试了您建议的 if not slider_value1 : 但这仍然允许我的原始值被覆盖。
    猜你喜欢
    • 2012-05-09
    • 2014-02-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-27
    • 2014-10-11
    • 1970-01-01
    相关资源
    最近更新 更多