[英]django MultiValueDictKeyError error, how do I deal with it
我正在嘗試將 object 保存到我的數據庫中,但它引發了MultiValueDictKeyError
錯誤。
問題在於表單, is_private
由復選框表示。 如果未選中該復選框,則顯然沒有通過任何內容。 這就是錯誤被丟棄的地方。
如何正確處理此異常並捕獲它?
這條線是
is_private = request.POST['is_private']
使用 MultiValueDict 的get
方法。 這也存在於標准字典中,並且是一種獲取值的方法,同時在不存在時提供默認值。
is_private = request.POST.get('is_private', False)
一般來說,
my_var = dict.get(<key>, <default>)
選擇最適合您的:
is_private = request.POST.get('is_private', False);
如果在 request.POST 中存在is_private
密鑰,則is_private
變量將等於它,如果不存在,那么它將等於 False。
if 'is_private' in request.POST:
is_private = request.POST['is_private']
else:
is_private = False
from django.utils.datastructures import MultiValueDictKeyError
try:
is_private = request.POST['is_private']
except MultiValueDictKeyError:
is_private = False
你得到它是因為你試圖從字典中獲取一個不存在的鍵。 你需要先測試它是否在那里。
嘗試:
is_private = 'is_private' in request.POST
或者
is_private = 'is_private' in request.POST and request.POST['is_private']
取決於您使用的值。
要記住的另一件事是request.POST['keyword']
指的是由指定的 html name
屬性keyword
標識的元素。
所以,如果你的表格是:
<form action="/login/" method="POST">
<input type="text" name="keyword" placeholder="Search query">
<input type="number" name="results" placeholder="Number of results">
</form>
然后, request.POST['keyword']
和request.POST['results']
將分別包含輸入元素keyword
和results
的值。
您為什么不嘗試在模型中將is_private
定義為default=False
?
class Foo(models.Models):
is_private = models.BooleanField(default=False)
對我來說,這個錯誤發生在我的 django 項目中,原因如下:
我在我的主頁中插入了一個新的超鏈接。html 出現在我的項目的模板文件夾中,如下所示:
<input type="button" value="About" onclick="location.href='{% url 'about' %}'">
在 views.py 中,我對 count 和 about 有以下定義:
def count(request):
fulltext = request.GET['fulltext']
wordlist = fulltext.split()
worddict = {}
for word in wordlist:
if word in worddict:
worddict[word] += 1
else:
worddict[word] = 1
worddict = sorted(worddict.items(), key = operator.itemgetter(1),reverse=True)
return render(request,'count.html', 'fulltext':fulltext,'count':len(wordlist),'worddict'::worddict})
def about(request):
return render(request,"about.html")
urlpatterns = [
path('admin/', admin.site.urls),
path('',views.homepage,name="home"),
path('eggs',views.eggs),
path('count/',views.count,name="count"),
path('about/',views.count,name="about"),
]
可以看出沒有。 上面的 3 中,在最后一個 url 模式中,我錯誤地調用了views.count,而我需要調用views.about。 views.py 的這一行fulltext = request.GET['fulltext']
in count function(由於 urlpatterns 中的錯誤條目而被錯誤地調用)引發了 multivaluedictkeyerror 異常。
然后我將 urls.py 中的最后一個 url 模式更改為正確的模式,即path('about/',views.about,name="about")
,一切正常。
顯然,一般來說,django 中的新手程序員可能會犯我犯的錯誤,即錯誤地為 url 調用另一個視圖 function,而不是傳遞不同的渲染調用或傳遞不同的對象集的預期行為。
希望這對 django 的一些新手程序員有所幫助。
首先檢查請求 object 是否有 'is_private' 密鑰參數。 大多數情況下,這種 MultiValueDictKeyError 發生在類字典請求 object 中缺少鍵。 因為字典是無序鍵,值對“關聯記憶”或“關聯數組”
換句話說。 request.GET 或 request.POST 是一個類似於字典的 object 包含所有請求參數。 這特定於 Django。
如果鍵在字典中,則 get() 方法返回給定鍵的值。 如果 key 不可用,則返回默認值 None。
您可以通過放置以下內容來處理此錯誤:
is_private = request.POST.get('is_private', False);
將 ajax 與 Django 一起使用時出現“MultiValueDictKeyError”錯誤。 只是因為在選擇元素時沒有輸入“#”。 像這樣。
data:{ name : $('id_name').val(),},
然后我把'#'和id放在一起,問題就解決了。
data:{ name : $('#id_name').val(),},
如果請求中不存在名稱,這將插入 NULL 值
name = request.data.get('name', None)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.