【问题标题】:Unable to figure out the cause of a Django KeyError无法找出 Django KeyError 的原因
【发布时间】:2021-04-04 22:19:45
【问题描述】:

我正在尝试创建一个电子商务网站,并且我正在使用 Django 会话将项目存储在购物车中,最初,一切都工作得很好,直到我决定做一些愚蠢的事情并在 chrome 中更改检查中的会话令牌。从那时起,我被KeyError 抛出。

Django Version: 3.0.8
Exception Type: KeyError
Exception Value: 'order1'

然后我在终端中运行了以下代码...

from django.contrib.sessions.models import Session
Session.objects.all().delete()

这清除了我的表,但似乎仍然没有解决这个错误。 我什至尝试在 Heroku 中托管它并从不同的设备访问该网站,但仍然抛出此错误。对此我有什么办法吗?

以防万一这是我的views.py...

def shop(request):

    if not request.session['order1']:
        request.session['order1'] = []


    if request.method == "POST":
        quantity = int(request.POST.get('quantity'))
        name = request.POST.get('name')

        if quantity >= 1:
            new_order = {"quantity":quantity, "name":name}

            request.session['order1'].append(new_order)
            
            # request.session['order'] = order
            context = {
                "check":request.session['order1'],
            }
        else:
            messages.warning(request, "You have entered an invalid quantity")
            context={}
    else:
        context={}
    return render(request, "store/shop.html", context)

任何帮助将不胜感激。 谢谢!

【问题讨论】:

  • 您必须将if not request.session['order1'] 替换为if not request.session.get('order1')。因为在初始状态下,您的会话对象中没有任何 order1 键。

标签: python django django-models django-sessions


【解决方案1】:

如果字典/集合中不存在该键,则使用方括号语法查找键将引发 KeyError

if not request.session['order1']:

应该是

if not request.session.get('order1'):

使用 try/except KeyError 也可以...

【讨论】:

  • Holi crappp 确实有效。感谢 LOTTT
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-01-17
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-14
  • 2019-07-29
相关资源
最近更新 更多