Python 多值DictKeyError请求方法:GET(Django)
我最近开始学习和使用Django,我多次遇到这个错误,有时是因为在html中重复使用了一个名称,有时是因为“variable\u name=request.POST['variable\u name']”之类的部分 关于这个错误,我访问了多个网站,并找到了一个解决方案,即在views.py的函数中键入“variable\u name=request.POST['variable\u name']”后 下一次我尝试再次发布数据“variable\u name=request.POST['variable\u name']”时,我必须执行类似“variable\u name=request.POST.get('variable-name'、'blank\u或\u任何\u能做的事情都是sealso') 上面的语句帮助我解决了这个错误,我从StackOverflow本身的一个线程中得到了这个解决方案,这是一个非常有用的站点 现在,对于这个问题,我只是想知道它们之间的区别Python 多值DictKeyError请求方法:GET(Django),python,django,Python,Django,我最近开始学习和使用Django,我多次遇到这个错误,有时是因为在html中重复使用了一个名称,有时是因为“variable\u name=request.POST['variable\u name']”之类的部分 关于这个错误,我访问了多个网站,并找到了一个解决方案,即在views.py的函数中键入“variable\u name=request.POST['variable\u name']”后 下一次我尝试再次发布数据“variable\u name=request.POST['varia
from django.shortcuts import render
from . import views
from datetime import date
from .models import Batch, Deleted_Batch
from django.utils.datastructures import MultiValueDictKeyError
# Create your views here.
today = date.today()
Date_Batch = str(today.day)+'/'+str(today.month)+'/'+str(today.year)
def Reg_Batch(request):
return render(request, 'Reg_Batch.html',{'Date_Batch':Date_Batch})
def Reg_Batch_Receive(request):
Region_Code=request.POST['Region_Code']
Branch_Code=request.POST['Branch_Code']
Batch_Number=request.POST['Batch_Number']
Farm_Code=request.POST['Farm_Code']
Farm_Status=request.POST['Farm_Status']
Farmer_Name=request.POST['Farmer_Name']
Farmer_Address=request.POST['Farmer_Address']
Farmer_Phone_Number=request.POST['Farmer_Phone_Number']
Farmer_Email=request.POST['Farmer_Email']
return render(request, 'Reg_Batch_Receive.html')
def Reg_Batch_View(request):
Region_Code=request.POST.get('Region_Code', 'Blank')
Branch_Code=request.POST.get('Branch_Code', 'Blank')
Farm_Code=request.POST.get('Farm_Code', 'Blank')
Farm_Status=request.POST.get('Farm_Status', 'Blank')
return render(request, 'Reg_Batch_View.html',{'Region_Code':Region_Code,'Branch_Code':Branch_Code,'Farm_Code':Farm_Code,'Farm_Status':Farm_Status})
def Reg_Batch_View_Receive(request):
Date_Batch= '20/08/2000'
Region_Code='586001'
Branch_Code='586001'
Batch_Number='586001'
Farm_Code='5484712'
Farm_Status='Active'
Farmer_Name='Joel Liao'
Farmer_Address='jojojojojojojo'
Farmer_Phone_Number='8088078086'
Farmer_Email='kuroneko@gmail.com'
return render(request,'Reg_Batch_View_Receive.html',{'Date_Batch':Date_Batch,'Region_Code':Region_Code,'Branch_Code':Branch_Code,'Batch_Number':Batch_Number,'Farm_Code':Farm_Code,'Farm_Status':Farm_Status,'Farmer_Name':Farmer_Name,'Farmer_Address':Farmer_Address,'Farmer_Phone_Number':Farmer_Phone_Number,'Farmer_Email':Farmer_Email})
def Reg_Batch_Delete(request):
Region_Code='586001'
Branch_Code='586001'
Batch_Number='586001'
Farm_Code='5484712'
Farm_Status='Active'
Farmer_Name='Joel Liao'
Farmer_Address='jojojojojojojo'
Farmer_Phone_Number='8088078086'
Farmer_Email='kuroneko@gmail.com'
Deleted_Batch_DataBase=Deleted_Batch({'Region_Code':Region_Code,'Branch_Code':Branch_Code,'Batch_Number':Batch_Number,'Farm_Code':Farm_Code,'Farm_Status':Farm_Status,'Farmer_Name':Farmer_Name,'Farmer_Address':Farmer_Address,'Farmer_Phone_Number':Farmer_Phone_Number,'Farmer_Email':Farmer_Email}),
return render(request,'Reg_Batch_Delete.html',{'Batch_Number':Batch_Number})
def Reg_Batch_Delete_Receive(request):
Batch_Number='586001'
return render(request,'Reg_Batch_Delete_Receive.html',{'Batch_Number':Batch_Number})
request.POST
是一个类似字典的对象(请参阅)
所以如果你这样做了
request.POST['foobar']
您可以访问已发布的变量foobar
。但是,如果未发布该变量,因此未在POST
中设置该变量,则您将获得多值dictkeyerror
。
这类似于访问未设置的默认词典中的密钥,例如
d={}
d['foobar']#引发异常
为了避免此错误,您可以执行以下操作
request.POST.get('foobar','default value')
以获取过账字段和默认值(如果不存在)。
因此,如果未在POST数据中设置foobar
,则收到的值为默认值
这类似于默认字典处理:
d={}
d、 get('foobar','random')#返回'random'
我可以建议您至少阅读一下Python内置类型的官方文档吗?正如wfehr所回答的,request.POST
是一个“类似dict的对象”“,这意味着它有一个与普通Python类似的接口dict
——这是Python中使用最多的类型之一,因此您最好知道如何使用它。FWIW,您经常会在各种文件包文档中阅读“dict-like”、“file-like”等对象,因此最好理解这意味着什么;-)