感谢您的帮助。
我有一个视图,允许我上传一个csv文件并阅读它。我希望将此文件的数据放在我的一个模板中(因此放在网页上)。我的观点如下:
@login_required
def uploadFunc(request, username):
user = get_object_or_404(User, username=username)
if request.method == 'GET':
return render_to_response('upload.html',{'user':user},context_instance=RequestContext(request))
elif request.method == 'POST':
with open('penguins.csv', 'rb') as f:
reader = csv.reader(f)
for m in reader:
print m
return HttpResponseRedirect("/")
从
中可以看出print m
return HttpResponseRedirect("/")
我打印提取的数据(它打印到终端,但不打印到网页),然后将上传页面重定向到我的主页penguin.csv中的表格(不要嘲笑这个名字!我知道:))应该构建。事情是我不明白(或知道)如何让我的模板index.html知道应该放在该表中的那个文件。
很抱歉很多话题,如果感到困惑,请随时提问。
再次感谢, blargie-bla
答案 0 :(得分:1)
您需要先上传文件并将其保存到磁盘(或内存)中,然后需要将此状态保存到下一个请求中。您有几种方法可以做到这一点,例如在会话中。
这是一个例子,它没有经过测试,可能会有一些错误......
FILE_UPLOAD_DIR = '/tmp'
class UploadFileForm(forms.Form):
file = forms.FileField()
@login_required
def uploadFunc(request, username):
user = get_object_or_404(User, username=username)
if request.method == 'GET':
return render_to_response('upload.html',{'user':user},context_instance=RequestContext(request))
elif request.method == 'POST':
form = UploadFileForm(request.POST, request.FILES)
if form.is_valid():
path = _handle_uploaded_file(request.FILES['file'])
request.session['uploaded_file'] = path
return HttpResponseRedirect("/")
def index(request):
if request.session.get("uploaded_file", None):
lines = []
with open(request.session.pop("uploaded_file"), 'rb') as f:
reader = csv.reader(f)
for m in reader:
lines.append(m)
return render_to_response('index.html', { 'file_lines': lines }, context_instance=RequestContext(request))
def _handle_uploaded_file(source):
fd, filepath = tempfile.mkstemp(prefix=source.name, dir=FILE_UPLOAD_DIR)
with open(filepath, 'wb') as dest:
shutil.copyfileobj(source, dest)
return filepath
然后在 index.html 的模板中,您可以使用 file_lines 填充表格。
我从刚才发现的各个片段中“粘贴”了这段代码,这里是网址列表: