【问题标题】:AttributeError: 'NoneType' object has no attribute 'append' error in Django projectAttributeError:“NoneType”对象在 Django 项目中没有属性“附加”错误
【发布时间】:2021-04-15 12:29:31
【问题描述】:

我正在尝试在 Django 会话中存储项目列表。代码如下,

def index(request):
  today = date.today()
  d = today.strftime("%A,  %B %d")
  if request.method == 'POST':
    item = request.POST.get('newItem')
    items = request.session.get('items',[])
    request.session.modified = True
    request.session['items'] = items.append(item)
  return render(request, 'todo/index.html', {'kindOfDay':d, 'newListItems': request.session.get('items', list())})

我收到以下错误,AttributeError: 'NoneType' object has no attribute 'append'

我在 settings.py 中包含以下两行

SESSION_SAVE_EVERY_REQUEST = True
SESSION_ENGINE = "django.contrib.sessions.backends.signed_cookies"

我是初学者,如果有任何帮助,我们将不胜感激。

【问题讨论】:

    标签: python django django-sessions django-cache


    【解决方案1】:

    抱歉,由于声誉低,我无法发表评论。 发生这种情况是因为 items 是一个空列表,因此您不能附加到它。在尝试获取之前,您是否在代码中的任何位置设置了包含关键“项目”的会话?

    这是您使用关键“项目”设置会话的方式:

    request.session['items'] = 'item1'
    

    这就是你获得它的方式:

    request.session.get('items')
    

    查看link 了解有关 django 会话的更多信息

    【讨论】:

    • 我希望密钥为items 的会话存储一个python 列表。是否可以存储列表?
    • 是的。但这与这个问题有什么关系?您将获得不存在的会话“项目”并将其放入 items 中。假设 items 不为空,您尝试向其附加一些内容,这就是您收到错误的原因。
    • 如果您在将列表存储为会话值方面需要帮助,请参阅其他 SO 问题。this 可能会帮助您。
    • 按照你说的request.session['items'] 将在每次打开网站时重置cookie。我希望浏览器保存 cookie
    • 那是另一个问题,与这个问题无关。请查看this。如果您仍有问题,请考虑提出单独的问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-11-21
    • 1970-01-01
    • 1970-01-01
    • 2022-07-20
    • 2018-02-11
    • 2016-10-21
    相关资源
    最近更新 更多