繁体   English   中英

如何删除 django 视图中的 keyerror?

[英]how can i remove keyerror in my django views?

我在第 10 行的 views.py 文件中出现错误。它说 keyerror:'nickname' 我想我调用了错误的键或什么? 如果你想要其他代码,我也可以附上它如果有人可以帮助我的话,下面是我的代码。 这是我的问题/views.py 文件

from django.shortcuts import render
from django.http import HttpResponseRedirect
from problems.models import Problems
from problems import utils

# Create your views here.

def showProblems(request):
    nickname = request.session['nickname']
    problems = Problems.objects()
    return render(request, 'showProblems.html', locals())

def addProblem(request):
    return render(request, 'addProblem.html')
def addProblems(request):
    return render(request, 'addProblems.html')

def addProblemCheck(request):
    try:
        rawProblem = request.POST['problem'].strip('\r\n')
        rawOptions = request.POST['options'].split('\r\n')
        rawAnswer = request.POST['answer'].strip('\r\n')
        rawType = request.POST['type']
    except:
        return render(request, 'info.html', {'info': '提交内容不完整', 'link': '/showProblems/'})

    myID = IDGenerator().getRandomID()
    problem = Problems(myID = myID, problem = rawProblem, options = rawOptions, answer = rawAnswer, type = rawType)
    problem.save()

    return HttpResponseRedirect('/showProblems/')

def addProblemsCheck(request):
    try:
        problems = request.POST['problems']
        rawType = request.POST['type']
    except:
        return render(request, 'info.html', {'info': '提交内容不完整', 'link': '/showProblems/'})

    problems = problems.split('\r\n\r\n')   #warning: this may be different in different browsers
    for problem in problems:
        arr = problem.split('\r\n')
        rawProblem = arr[0]
        rawAnswer = arr[-1]
        rawOptions = arr[1: -1]

        myID = IDGenerator().getRandomID()
        newProblem = Problems(myID = myID, problem = rawProblem, options = rawOptions, answer = rawAnswer, type = rawType)
        newProblem.save()
    return HttpResponseRedirect('/showProblems/')

def editProblem(request):
    try:
        myID = request.GET['myID']
    except:
        return render(request, 'info.html', {'info': '错误的请求方式', 'link': '/showProblems/'})
    problem = Problems.objects(myID = myID).first()
    if not problem:
        return render(request, 'info.html', {'info': '错误的请求ID', 'link': '/showProblems/'})

    problem.options = '\n'.join(problem.options)
    print (problem.options)
    return render(request, 'editProblem.html', {'problem': problem})

def editProblemCheck(request):
    try:
        rawProblem = request.POST['problem']
        rawOptions = request.POST['options']
        rawAnswer = request.POST['answer']
        myID = request.POST['myID']
        rawType = request.POST['type']
    except:
        return render(request, 'info.html', {'info': '提交内容不完整', 'link':'/showProblems/'})

    problem = Problems.objects(myID = myID).first()
    if not problem:
        return render(request, 'info.html', {'info': '错误的请求ID', 'link':'/showProblems/'})

    problem.problem = rawProblem.strip('\r\n')
    problem.options = rawOptions.split('\r\n')
    problem.answer = rawAnswer
    problem.type = rawType
    problem.save()

    return HttpResponseRedirect('/showProblems/')

def deleteProblem(request):
    try:
        myID = request.GET['myID']
    except:
        return render(request, 'info.html', {'info': '错误的请求方式', 'link':'/showProblems/'})

    problem = Problems.objects(myID = myID).first()
    if not problem:
        return render(request, 'info.html', {'info': '错误的请求ID', 'link':'/showProblems/'})

    problem.delete()
    return HttpResponseRedirect('/showProblems/')

这是我的问题/models.py 文件!

from __future__ import unicode_literals

from django.db import models
from mongoengine import *

# Create your models here.

connect('pyExam')

class Problems(Document):
    nickname = StringField()
    problem = StringField()
    options = ListField(StringField(), default=list)
    answer = StringField()
    type = StringField()

此行可能触发的错误

nickname = request.session['nickname']

表示调用此function时,session属性没有名为nickname的键,例如以下实例

 return HttpResponseRedirect('/showProblems/')

检查密钥是否存在,并在此处查看文档中的更多信息

我也很困惑为什么那条线是必要的,如果有任何遗漏,请在评论中更新。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM