基于Django框架实现word填充及下载
work⽂档
说明
word⽂档使⽤python对模板进⾏填充,对word模板⽂件的填充依赖于docxtpl插件,⽂件格式为.docx,填充时,使⽤类似于jinjia2模板引擎的语法,中对该插件的使⽤有详细教程。
插件安装
pip install docxtpl
后端实现
说明
django 1.8版本当中,官⽅⽂档对于⽂件下载的⽀持,提供了两个类StreamingHttpResponse和 FileResponse,两者的详细内容和区别见。
StreamingHttpResponse类,在django和浏览器之间主要产⽣的流式的⽂件传输响应。对于⼤型⽂件⾮
常有⽤。
FileResponse类,该类为StreamingHttpResponse类针对⼆进制⽂件进⾏优化的⼀个⼦类。使⽤wsgi服务器提供的进⾏⽂件传输,如果没有提供。则将⽂件以⼩块进⾏流式传输。
代码实现
⽂件打开
python官方文档中文版# 流⽅式读取⽂件
def read_file(file_name, size):
with open(file_name, mode='rb') as fp:
while True:
c = fp.read(size)
if c:
yield c
else:
break
⾮模板⽂件删除
import os
def delete_docx_file(filepath):
if ists(filepath):
files = os.listdir(filepath)
for file in files:
if file != "template.docx":
Views
import os
from django.http import StreamingHttpResponse
from anslation import ugettext_lazy as _
from sponse import Response, status
@api_view(['GET'])
def download_report(request):
bs_id = ('')
brandsearchhistory = BrandSearchHistory.objects.select_related().filter(id=bs_id).first()
if brandsearchhistory:
try:
data = {
'模板⾥的值': '需要填进去的数据',
}
except Exception as e:
return Response(_('Value Error'), status=status.HTTP_400_BAD_REQUEST)
# 删除⽣成的报告
filename = '⽣成的word⽂档名'# 所⽣成的word⽂档需要以.docx结尾,⽂档格式需要
filepath = '模板路径'
# delete_docx_file(filepath) # 收到每个请求后,会将⽂件当中的⾮模板⽂件删除 template_path = os.getcwd() + '/templates/brand/template.docx'
template = DocxTemplate(template_path)
template.save(os.path.join(filepath,filename))
response = StreamingHttpResponse(read_file(os.path.join(filepath, filename), 512))
response['Content-Type'] = 'application/msword'
response['Content-Disposition'] = 'attachment;filename="{}"'.format(filename)
# time.sleep(10)
return response
else:
return Response(_("NO THIS BRABDSEARCH"), status=status.HTTP_400_BAD_REQUEST) urls.py⽂件当中将路由指向该⽅法,即可实现⽂档下载。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论