在我的Django项目中,我正在构建一个购物车系统。我想将购物车数据存储在会话变量中,但我不知道在哪里初始化它。
我尝试过这样的事情:
if 'cart' not in request.session:
request.session['cart'] = {}
在自定义上下文处理器中,但上下文处理器似乎没有修改会话数据。我还能在哪里进行这样的初始化?我不想把它放在我从购物车中获取价值的每个地方。
答案 0 :(得分:5)
你可以把它放在custom request middleware的一块中,但说实话,我认为这样做太过分了。在视图函数中需要时,可能更容易初始化购物车。请注意,如果该值尚不存在,您可以使用request.session.get
自动获取默认值。类似的东西:
def my_view(request):
cart = request.session.get('cart', {})
# Do stuff with cart
request.session['cart'] = cart
答案 1 :(得分:1)
在中间件(在会话中间件下面,显然)这样做会确保它始终设置。
答案 2 :(得分:0)
为什么需要测试购物车是否在request.session中。为什么不这样做:
cart_value = request.session.get('cart',{})
基本上该做的是在会话中返回'cart'的值,如果购物车中没有值,则返回空字典。
答案 3 :(得分:0)
假设您的视图始终使用RequestContext,您的代码应该与context_processor一样,。
基于几年前的Satchmo,我对我的购物车做了同样的事情。 我有一个context_processor,我从会话中找到Cart并将其传递给模板。 那里也进行了很多其他会话修改......
所以..你的代码应该按原样运行。它在执行吗?它安装了吗?