“的用法;如果不是x:做点什么;在Django/Python中

“的用法;如果不是x:做点什么;在Django/Python中,python,django,Python,Django,我找到了下面这个问题的一个非常有用的答案,但我不太清楚。 根据我对“如果不是x:做点什么”的理解,“如果不是”只是检查x的值是否为真。如果不是,它会有所作为 我正在学习Django,在我试图理解的一个例子中,他们使用“如果不是:”逻辑来设置购物车 下面是比我聪明得多的人如何编写代码: 在settings.py文件中: CART_SESSION_ID = 'cart' 在cart.py文件中: from django.conf import settings class Cart(objec

我找到了下面这个问题的一个非常有用的答案,但我不太清楚。

根据我对“如果不是x:做点什么”的理解,“如果不是”只是检查x的值是否为真。如果不是,它会有所作为

我正在学习Django,在我试图理解的一个例子中,他们使用“如果不是:”逻辑来设置购物车

下面是比我聪明得多的人如何编写代码:

在settings.py文件中:

CART_SESSION_ID = 'cart'
在cart.py文件中:

from django.conf import settings

class Cart(object):

    def __init__(self, request):
        """
        Initialize the cart.
        """
        self.session = request.session
        cart = self.session.get(settings.CART_SESSION_ID)
        if not cart:
            # save an empty cart in the session
            cart = self.session[settings.CART_SESSION_ID] = {}
        self.cart = cart
所以在我看来,CART\u SESSION\u ID最初是一个值为“CART”的字符串

变量cart必须是一个字典,用于存储产品ID、价格和数量


由于“cart”的初始值是一个带值的字符串,“if not cart:”会返回“True”,因此,永远不会执行?

是的,在您的示例中它是多余的,因为在
django by example
教程中没有使用实际的会话处理机制

实际上必须实现的想法是,当
购物车seision\u ID
False
None
时,它将执行,因此必须创建一辆新车,以便生成默认购物车(空dict)


所以,是的,你是对的,在你的例子中,if行永远不会执行,但这个例子永远不会在现实世界的应用程序中使用。

是的,它在你的例子中是多余的,因为在
django by example
教程中没有使用实际的会话处理机制

实际上必须实现的想法是,当
购物车seision\u ID
False
None
时,它将执行,因此必须创建一辆新车,以便生成默认购物车(空dict)


因此,是的,您是对的,在您的示例中,if行永远不会执行,但这个示例永远不会在现实世界的应用程序中使用。

not x
对于
x
是以下元组中的任何元素(可能不限于):
(None,0,0L,0.0,“,(),[],set(),{})
。在Django的例子中,有更多这样的例子:例如,如果
x
将是一个空的
QuerySet
。尝试打印
cart
self.session.get(..
)的值(可能还有类型?)。这与
settings.cart\u session\u ID
无关。因此,您所说的“self.session.get(settings.cart\u session\u ID)”不会返回“cart”这是在settings.py文件中分配的?如果是这样,为什么在settings.py文件中声明了CART\u SESSION\u ID='CART'。我不确定self.SESSION是什么(我说它是dict,因为调用了它的
get
方法),这就是我建议打印的原因(或者如果您正在使用IDE逐步调试)因此,
self.session.get('cart')
可能会返回
None
。但在我看来,您混淆了
设置。cart\u session\u ID
的值
'cart'
和变量
cart
(来自
\uu init\uu
)。它们根本不相关。
not x
对于
x
是以下元组中的任何元素(可能不限于):
(None,0,0L,0.0,”,(),[],set(),{})
。在Django的情况下,有更多这样的情况:例如,
x
将是空的
QuerySet
。请尝试打印该值
购物车的(
self.session.get(..
)(可能还有类型?)。这与
设置.cart\u session\u ID
无关。因此,您所说的“self.session.get(settings.cart\u session\u ID)”不返回“cart”这是在settings.py文件中分配的?如果是这样,为什么在settings.py文件中声明了CART\u SESSION\u ID='CART'。我不确定self.SESSION
是什么(我说它是dict,因为调用了它的
get
方法),这就是我建议打印的原因(或者如果您正在使用IDE逐步调试)因此,
self.session.get('cart')
可能会返回
None
。但在我看来,您混淆了
设置。cart\u session\u ID
的值
'cart'
与变量
cart
(from
\uu init\uuuu
)没有任何关联。