'NoneType'对象在我的购物车中没有属性'keys'.html在 django 中



我为我的网站创建了添加到购物车的功能。我现在面临的问题是,当用户登录时,向购物车添加一些东西,然后到达添加到购物篮的部分时,它会加载页面并显示添加的项目,但当用户注销并再次登录网站,直接转到添加到购物购物车页面而不添加任何项目时,我想这会显示上述错误每次它记录的会话都很清楚,但我不想发生这种情况,不知道是什么导致了问题?

我的视图.py用于购物车

class Cart(View):
def get (self, request): 
ids = (list(request.session.get('cart').keys()))
sections = Section.get_sections_by_id(ids)
print(sections)
return render(request, 'cart.html', {'sections': sections})

是的,它在注销期间刷新会话。你可以在这里查看源代码。为了保持会话,您可以将添加的产品存储在持久内存中。可能是您可以存储在数据库中。

[docs]def logout(request):
"""
Remove the authenticated user's ID from the request and flush their session
data.
"""
# Dispatch the signal before the user is logged out so the receivers have a
# chance to find out *who* logged out.
user = getattr(request, 'user', None)
if not getattr(user, 'is_authenticated', True):
user = None
user_logged_out.send(sender=user.__class__, request=request, user=user)
# remember language choice saved to session
language = request.session.get(LANGUAGE_SESSION_KEY)
request.session.flush()
if language is not None:
request.session[LANGUAGE_SESSION_KEY] = language
if hasattr(request, 'user'):
from django.contrib.auth.models import AnonymousUser
request.user = AnonymousUser()

编辑:

有多种方法可以做到这一点:

1.(您可以将其存储在cookie中:解决方案

2.(使用自定义注销覆盖注销方法:解决方案

3.(使用数据库表来存储购物车信息。