首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Django: Django无法识别post变量

Django: Django无法识别post变量
EN

Stack Overflow用户
提问于 2012-08-11 10:16:40
回答 3查看 981关注 0票数 0

我可能遗漏了一些非常基本的东西,但当我试图通过函数中的:request['title']访问post变量时,我得到了这个错误:

代码语言:javascript
运行
复制
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: {}>"

该函数的完整代码如下:

代码语言:javascript
运行
复制
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变量如下所示:

代码语言:javascript
运行
复制
POST:
title = u'sdff'

编辑:同样,当我使用for循环列出项目时,title变量就会出现。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-08-11 10:36:14

导致错误的请求是一个GET,您正在尝试从POST dict中获取title参数的值。将您的代码更改为:

代码语言:javascript
运行
复制
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。

票数 3
EN

Stack Overflow用户

发布于 2012-08-11 10:37:04

你确定你的请求真的是一个帖子吗?对我来说,它看起来像是试图从POST请求中检索数据,但该查询实际上是一个GET请求。

此外,您应该使用if 'title' in request.POST:来检查请求中是否存在该变量……

问候

艾蒂安

票数 1
EN

Stack Overflow用户

发布于 2012-08-11 10:38:10

首先,这是一个GET查询,因此POST dict将为空。你的意思是要在你的表单元素中设置method='POST'吗?

其次,KeyError意味着关键字不在POST字典中。你应该做的是:

代码语言:javascript
运行
复制
title = request.POST.get('title', None)
if title is None:
    ...

如果密钥不在request.POST中,则将title设置为None

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11911345

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档