我有一个用户上传xlsx文件的字段在Django中,我很难让Django从上传该xlsx文件的用户返回一个简单的基于文本的网页。基本上,我需要Django从他们上传的xlsx文件的单元格生成文本。我试图使用openpyxl来做到这一点。在我的脚本运行之后,如何让Django生成包含xlsx文件结果的新页面?我需要创建一个新模板,一旦用户提交上传的xlsx文件,该模板就会重定向到它吗?这是一个例子。
# views.py
from django.shortcuts import render
from django.http import HttpResponseRedirect
from django.core.urlresolvers import reverse
from .forms import UploadForm
import openpyxl
def index2(request):
if request.method != 'POST':
form = UploadForm()
else:
form = UploadForm(request.POST or None, request.FILES or None)
if form.is_valid():
form.save()
file = request.FILES['fileobj']
wb = openpyxl.load_workbook(file)
sheet = wb.get_sheet_by_name('Sheet1')
# script that runs overs the sheet here...
return HttpResponseRedirect(reverse('webpage with results'))
context = {'form': form}
return render(request, 'upload/upload_page.html', context)
答案 0 :(得分:0)
我建议分解问题。现在你正试图一次解决几件事:
我将1)和2)放在一边并独立处理XSLX加载/查看部分。例如,您可以在视图中对文件的路径进行硬编码,并以此方式使其坚如磐石。毕竟这只是发展。一旦它好了,删除硬编码文件并连接真正的上传/保存逻辑。
实际上,您需要创建一个代表说UploadedExcelFile
的模型类。上载文件时,创建一个实例并保存它(即数据库中的一行)。然后编写一个加载该模型实例的视图,该视图又可以加载Excel文件。
您可能还想考虑摄取文件,而不是仅仅存储在磁盘上,或者使用某种异步方法(例如django-q)。这取决于几个因素,比如需要从文件中提取什么样的信息,是否可编辑等等。如果是我,而不知道系统的界限,我会做这样的事情: