在我的Django項目中,我構建了一個購物車系統。我想將購物車數據存儲在會話變量中,但我不知道在哪裏初始化它。在哪裏初始化Django會話變量?
我試圖做這樣的事情:
if 'cart' not in request.session:
request.session['cart'] = {}
在自定義的背景處理器
,但背景處理器似乎並沒有修改會話數據。我還會在哪裏放置像這樣的初始化?我不想把它放在我從購物車獲得價值的每個地方。
在我的Django項目中,我構建了一個購物車系統。我想將購物車數據存儲在會話變量中,但我不知道在哪裏初始化它。在哪裏初始化Django會話變量?
我試圖做這樣的事情:
if 'cart' not in request.session:
request.session['cart'] = {}
在自定義的背景處理器
,但背景處理器似乎並沒有修改會話數據。我還會在哪裏放置像這樣的初始化?我不想把它放在我從購物車獲得價值的每個地方。
在中間件(顯然,在會話中間件下面)做這件事將確保它始終設置。
你可以把它放在一塊custom request middleware,但說實話,我認爲這會在這裏矯枉過正。當您在視圖功能中需要時,初始化購物車可能會更容易。請注意,如果該值尚不存在,則可以使用request.session.get
自動獲取默認值。例如:
def my_view(request):
cart = request.session.get('cart', {})
# Do stuff with cart
request.session['cart'] = cart
爲什麼您需要測試購物車是否在request.session中。爲什麼不這樣做:
cart_value = request.session.get('cart',{})
基本上什麼,會做是在「購物車」在會話返回值,如果有在車沒有值,則返回空字典。
你的代碼應該工作如同帶有一個context_processor,假設你的視圖總是使用RequestContext。
基於幾年前的Satchmo,我正在爲我的購物車做同樣的事情。 我有一個context_processor,我從會話中找到Cart並將它傳遞給模板。 很多其他會話修改也在那裏完成...
所以..你的代碼應該按原樣工作。它是否在執行?它是否安裝?
上下文處理器將只觸發使用RequestContext呈現的模板。你確定你傳遞的是一個RequestContext而不是一個簡單的字典或Context對象嗎?這對我有用。 – 2010-12-22 21:11:27
這使我困惑,因爲是的,我確信我傳遞了一個RequestContext。事實上,上下文處理器中的其他代碼正在運行,但初始化代碼不是。也許我錯過了別的東西。無論如何,其他兩種解決方案都在起作用,所以我會使用其中的一種解決方案。 – davidscolgan 2010-12-22 21:19:02