当用户在前端网站中输入数字时,我会自动生成Word文档。我的首要目标是让Django开始下载文档,但这并不成功。
现在,我只想将文件保存到服务器并将文件位置URL传递回我的JS,这样我就可以创建一个链接供用户点击。
前端使用AJAX调用将用户输入传递回视图。麻烦的是在Django视图中获取正确的路径。这是我的观点:
@login_required
@custom_header
def create_document(request, *args, **kwargs):
"""Create a doc and return URI."""
我尝试使用this SO方法:
doc_path = static('doc.docx')
^返回此错误: IOError:[Errno 2]没有这样的文件或目录:'/ static / doc.docx'
我在两个位置手动创建了文件夹和doc.docx文件,因此它们确实存在。根据建议on SO here,我将其更改为:
doc_path = os.path.join(os.path.dirname(__file__), 'doc/doc.docx')
^但结果是: IOError:[Errno 13]权限被拒绝:'。/ app_folder / doc / doc.docx'
其余观点:
doc_name = doc.docx
# Template on which the doc is based
template_path = os.path.join(os.path.dirname(__file__), 'doc/template.docx')
form = CleanerForm(request.POST)
if form.is_valid():
user_input = form.cleaned_data.get('user_input')
doc_context = requests.get(
'https://MY_API_URI/user_input=%s' % user_input,
)
else:
# Failure Actions
# Generate doc with context
print os.getcwd()
template = DocxTemplate(tmpl_path)
template.render(json.loads(doc_context.text))
template.save(doc_path)
return HttpResponse(doc_path)
进口
from docxtpl import DocxTemplate
import json
import os
from .forms import CleanerForm
from django.http import HttpResponse
from django.templatetags.static import static
我打开文件的初始代码(不起作用)是:
with open(doc_path) as this_doc:
wrapper = File(this_doc)
content_type = mimetypes.guess_type(doc_path)[0]
response = HttpResponse(wrapper, content_type=content_type)
response['Content-Length'] = os.path.getsize(doc_path)
response['Content-Disposition'] = "attachment; filename=%s" % doc_name