簡體   English   中英

Django:Django無法識別發布變量

[英]Django: Django not recognizing post variable

我很可能缺少一些非常基本的東西,但是當我嘗試通過函數中的request['title']來修飾一個帖子時,出現此錯誤:

Environment:


Request Method: GET
Request URL: http://127.0.0.1:8000/ajax/drafts/create

Django Version: 1.4
Python Version: 2.7.3
Installed Applications:
('django.contrib.auth',
 'django.contrib.contenttypes',
 'django.contrib.sessions',
 'django.contrib.sites',
 'django.contrib.messages',
 'django.contrib.staticfiles',
 'Knights',
 'django.contrib.admin')
Installed Middleware:
('django.middleware.common.CommonMiddleware',
 'django.contrib.sessions.middleware.SessionMiddleware',
 'django.contrib.auth.middleware.AuthenticationMiddleware',
 'django.contrib.messages.middleware.MessageMiddleware')


Traceback:
File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/core/handlers/base.py" in get_response
  111.                         response = callback(request, *callback_args, **callback_kwargs)
File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/contrib/auth/decorators.py" in _wrapped_view
  20.                 return view_func(request, *args, **kwargs)
File "/Users/Mike/Desktop/Main/Django-Development/BBN/Knights/views.py" in document_create
  179.     title = request.POST['title']
File "/Library/Python/2.7/site-packages/Django-1.4-py2.7.egg/django/utils/datastructures.py" in __getitem__
  258.             raise MultiValueDictKeyError("Key %r not found in %r" % (key, self))

Exception Type: MultiValueDictKeyError at /ajax/drafts/create
Exception Value: "Key 'title' not found in <QueryDict: {}>"

該函數的完整代碼是這樣的:

def document_create(request):
    user = request.user
    title = request.POST['title']
    if (title != ''):
        Draft.objects.create(content='Your content goes here', user=user, title=title)

和列出的post變量是這樣的:

POST:
title = u'sdff'

編輯:另外,當我通過for循環列出項目時,標題變量出現。

導致錯誤的請求是GET,並且您正嘗試從POST字典中獲取title參數的值。 將您的代碼更改為:

def document_create(request):
    user = request.user
    title = request.GET['title']
    if (title != ''):
        Draft.objects.create(content='Your content goes here', user=user, title=title)

或者,您可以通過檢查request.method屬性來測試請求是GET還是POST。

您確定您的請求確實是POST嗎? 對我來說,您似乎正在嘗試從POST請求中檢索數據,但查詢實際上是GET請求。

另外,您應該if 'title' in request.POST:來檢查request中變量的存在...

問候

艾蒂安

首先,這是一個GET查詢,因此POST字典將為空。 您是否要在HTML的表單元素中設置method='POST'

其次, KeyError表示密鑰不在POST詞典中。 您應該這樣做:

title = request.POST.get('title', None)
if title is None:
    ...

如果密鑰不在request.POST則將title設置為None

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM