我已经使用这个板找到了我的问题的许多答案,但我找不到这个问题的帖子。我确定我必须有一些错误的代码。我是 Web 开发的新手,所以我正在学习所有这些(同时学习 HTTP、HTML、Python 和 Django,我确实有 20 多年的编程经验,所以我明白了)。我在培训视频中的某个时刻,你们中的许多人都知道我在哪里发布新内容而不会从编辑 html 中出错,但似乎字符串数据“内容”没有被传递到下一阶段,它会得到保存到数据库中。到目前为止,我遇到的所有错误都与以下事实有关:培训是用非常旧的版本编写的,而我使用的是较新的版本。但是我认为这是我的错,所以我需要一些帮助。我认为在我的 views.py 中我没有正确传递“内容”字符串或者我没有将 key 传递给数据库条目,因为错误似乎是在下一节中“保存” View 第一行抛出这个错误说明它找不到我试图从上一个 View 传递的数据字符串。错误是...
Request Method: POST
Request URL: http://127.0.0.1:7000/wikicamp/tony/save/
Django Version: 1.3.1
Exception Type: MultiValueDictKeyError
Exception Value:
"Key 'content' not found in <QueryDict: {u'csrfmiddlewaretoken': [u'a9be0ebf915fc40b13b016e791a153be']}>"
追溯
Environment:
Request Method: POST
Request URL: http://127.0.0.1:7000/wikicamp/tony/save/
Django Version: 1.3.1
Python Version: 2.7.2
Installed Applications:
['django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.sites',
'django.contrib.messages',
'django.contrib.staticfiles',
'wikicamp.wiki',
'django.contrib.admin']
Installed Middleware:
('django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware')
Trace back:
File "C:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
111. response = callback(request, *callback_args, **callback_kwargs)
File "D:\web dev\training\Django\secondproj\wikicamp\..\wikicamp\wiki\views.py" in save_page
30. content = request.POST["content"] # error thrown for this line of code
File "C:\Python27\lib\site-packages\django\utils\datastructures.py" in __getitem__
256. raise MultiValueDictKeyError("Key %r not found in %r" % (key, self))
Exception Type: MultiValueDictKeyError at /wikicamp/tony/save/
Exception Value: "Key 'content' not found in <QueryDict: {u'csrfmiddlewaretoken': [u'a9be0ebf915fc40b13b016e791a153be']}>"
查看代码
def view_page(request, page_name):
try:
page=Page.objects.get(pk=page_name)
except Page.DoesNotExist:
return render_to_response("create.html", {"page_name":page_name})
content = page.content
return render_to_response("view.html", {"page_name":page_name, "content":content})
def edit_page(request, page_name):
try:
page = Page.objects.get(pk=page_name)
content = page.content
except Page.DoesNotExist:
content = ""
return render_to_response("edit.html",{"page_name":page_name, "content":content},context_instance=RequestContext(request))
def save_page(request, page_name):
content = request.POST["content"] # error thrown for this line of code
try:
page = Page.objects.get(pk=page_name)
page.content = content
except Page.DoesNotExist:
page = Page(name=page_name, content = content, date = date)
page = Page(name=page_name, content = content)
page.save()
return HttpResponseRedirect("/wikicamp/" + page_name +"/")
请您参考如下方法:
完整跟踪更有意义,尽管我应该在使用您的示例代码之前看到它。
“content”键仅在页面发布后存在于 request.POST 中。不过,看起来您正在为 POST 使用单独的 View ,所以它应该在那里。然而,您永远不想直接引用字典中您不确定 120% 是否存在的键。相反,使用 dict.get:
content = request.POST.get('content')
如果未设置 key ,将存储 None。您还可以指定一个默认值:
content = request.POST.get('content', 'this is the default')
