[英]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.