很抱歉问一个以前在这个网站上被问过和回答过的简单问题,但是我开始学习 Django 并且我无法通过参考那些早期的 问题或文档来解决我的问题。我有一个简单的应用程序,可以让用户上传 .txt 文件,并且可以正常工作。我现在想添加到应用程序,以便对上传的文本文件执行一个简单的功能,但我一直在尝试实现该功能的行上收到 MultiValueDictKeyError。这是我要实现的功能(这是 sample_functions.py):
def print_file_contents(file_object):
with open(file_object) as f:
f = f.decode("utf-8")
f = f.read()
print f
这是我的models.py:
from django.db import models
from django.forms import ModelForm
class Upload(models.Model):
pic = models.FileField("Choose a text file to upload", upload_to="text/")
upload_date=models.DateTimeField(auto_now_add =True)
# FileUpload form class.
class UploadForm(ModelForm):
class Meta:
model = Upload
这是我的views.py:
from django.shortcuts import render
from uploader.models import UploadForm,Upload
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from uploader.resources.sample_functions import print_file_contents
# Create your views here.
def home(request):
if request.method=="POST":
img = UploadForm(request.POST, request.FILES)
if img.is_valid():
print_file_contents(request.FILES[img])
img.save()
return HttpResponseRedirect(reverse('fileupload'))
else:
img=UploadForm()
images=Upload.objects.all()
return render(request,'home.html',{'form':img,'images':images})
这是我的 home.html:
{% load staticfiles %}
<link rel="stylesheet" type="text/css" href="{% static 'uploader/style.css' %}" />
<div style="padding:40px;margin:40px;border:1px solid #ccc">
<body>
<center><h2>Here Be Dragons</h2></center>
<p>Lorem ipsum...</p>
<p></p>
</body>
<center><form action="#" method="post" enctype="multipart/form-data">
{% csrf_token %} {{form}}
<input type="submit" value="Upload" />
</form></center><p></p><p>Uploaded files:</p>
{% for img in images %}
{{forloop.counter}}.<a href="{{ img.pic.url }}">{{ img.pic.name }}</a>
({{img.upload_date}})<hr />
{% endfor %}
</div>
这是追溯:
Environment:
Request Method: POST
Request URL: http://127.0.0.1:8000/upload/
Django Version: 1.6.5
Python Version: 2.7.0
Installed Applications:
('django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'uploader')
Installed Middleware:
('django.contrib.sessions.middleware.SessionMiddleware',
'django.middleware.common.CommonMiddleware',
'django.middleware.csrf.CsrfViewMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.messages.middleware.MessageMiddleware',
'django.middleware.clickjacking.XFrameOptionsMiddleware')
Traceback:
File "c:\Python27\lib\site-packages\django\core\handlers\base.py" in get_response
112. response = wrapped_callback(request, *callback_args, **callback_kwargs)
File "C:\Users\Douglas\Desktop\sample\uploader\views.py" in home
14. print_file_contents(request.FILES[img])
File "c:\Python27\lib\site-packages\django\utils\datastructures.py" in __getitem__
301. raise MultiValueDictKeyError(repr(key))
Exception Type: MultiValueDictKeyError at /upload/
Exception Value: '<uploader.models.UploadForm object at 0x000000000340AEF0>'
有谁知道我如何修改print_file_contents(request.FILES[img])
views.py中的行或工作流程的任何其他部分,以便能够打印上传文件的内容?如果您能提供任何建议,我将不胜感激。