目的

数据已经存储在django数据库中,现在希望将数据库中的数据按照特定字段导入到word中,实现数据的动态写入。同时提供下载方法给前端用户。

环境

python 3.6.1

django 1.11.14

pillow 5.2.0

docxtpl 0.5.0

djangorestframework 3.8.2

系统为win7 64位,word版本为2007(劲量为word2007,其他版本可能会出问题)

步骤

1.  新建django项目,在根目录下放置word模板文件“train.docx”

2 .  安装上述python安装包

pip install 。。。。

3. 修改前端html文件

{% extends "app/layout.html" %}{% block content %}<div class="jumbotron"><h1>测试</h1>    <p><a href="{% url 'downloadreport' %}" class="btn btn-primary btn-large">生成word并下载</a></p>
</div>{% endblock %}

4 . 修改url.py文件

urlpatterns = [# Examples:url(r'^$', app.views.home, name='home'),url(r'^downloadreport', app.views.downloadreport, name='downloadreport'),]

5. 修改views.py文件

"""
Definition of views.
"""from django.shortcuts import render
from django.http import HttpRequest
from django.template import RequestContext
from datetime import datetime#新添加的用于报表的文件
import os
from django.http import StreamingHttpResponse
from django.utils.translation import ugettext_lazy as _
from rest_framework.response import Response
from rest_framework.decorators import api_view
from docxtpl import DocxTemplate
from docxtpl import InlineImage
from docx.shared import Mm, Inches, Ptdef home(request):"""Renders the home page."""assert isinstance(request, HttpRequest)return render(request,'app/index.html',{'title':'Home Page','year':datetime.now().year,})# 流方式读取文件
def read_file(file_name, size):with open(file_name, mode='rb') as fp:while True:c = fp.read(size)if c:yield celse:break@api_view(['GET'])
def downloadreport(request):filename = 'test.docx'        # 所生成的word文档需要以.docx结尾,文档格式需要filepath = 'D://'template_path = os.getcwd() + '/train.docx'template = DocxTemplate(template_path)context1 = { 'chengyun' : "World company",'myimage': InlineImage(template, 'D:\\ceshi.jpg', width=Mm(30), height=Mm(60)), }template.render(context1)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

这里,我把图片命名为"ceshi.jpg"并且放在了D盘,在项目根目录的train.docx中添加了模板标签{{chengyun}}和{{myimage}}

然后采用django进行文字和图片的替换,同时图片给了长宽的参数用来进行图像尺寸的动态调整。文件读取方式采用了流读取方式,512字节的一个流。

整个项目采用VS2015在windows下开发,VS下安装django教程网址:https://mp.csdn.net/postedit/81103532

当然,采用其他IDE直接将该项目跑起来也没有问题。这里给出整个测试工程的代码地址

https://download.csdn.net/download/qianbin3200896/10621095

django操作word全程实录讲解(包含操作图片,内含代码下载地址)相关推荐

  1. Python入门到实战(五)自动化办公、pandas操作Excel、数据可视化、绘制柱状图、操作Word、数据报表生成、pip install国内镜像下载

    Python入门到实战(五)conda使用.pandas操作Excel.数据可视化.绘制柱状图.操作Word.数据报表生成.pip install国内镜像下载 conda使用 常用操作 配置VS+Co ...

  2. python使用视频_Python中操作各种多媒体,视频、音频到图片的代码详解

    我们经常会遇到一些对于多媒体文件修改的操作,像是对视频文件的操作:视频剪辑.字幕编辑.分离音频.视频音频混流等.又比如对音频文件的操作:音频剪辑,音频格式转换.再比如我们最常用的图片文件,格式转换.各 ...

  3. python播放视频代码_Python中操作各种多媒体,视频、音频到图片的代码详解

    我们经常会遇到一些对于多媒体文件修改的操作,像是对视频文件的操作:视频剪辑.字幕编辑.分离音频.视频音频混流等.又比如对音频文件的操作:音频剪辑,音频格式转换.再比如我们最常用的图片文件,格式转换.各 ...

  4. python操作word的入门教程_Python操作Word的入门教程

    咪哥杂谈 本篇阅读时间约为 5 分钟. 1 前言 近期比较忙,在做一个新项目,所以公众号更新时间拉长了许多...等忙完这一阵,依然会保持一周至少 2 篇的原创技术文章. 继续之前的主题,今天来介绍下, ...

  5. C# 操作Word书签(二)——插入图片、表格到书签;读取、替换书签

    概要 书签的设置可以帮助我们快速的定位某段文字,使用起来很方便,也很节省时间.在前一篇文章"C# 如何添加/删除Word书签"中介绍了插入.删除书签的方法,本篇文章将对C# 操作W ...

  6. java操作word文档(文字,图片,表格添加以及替换操作)

    注:本文由于个人工作需要,有对多个他人博文进行借鉴,但是多数博文都只是讲到了小部分,例如图片/表格的操作,都只有根据书签进行替换,比较片面,本人有总结到根据文字进行图片/表格的替换,希望可以帮到更多有 ...

  7. C# VS2012操作word文档 (二).插入表格图片

    在上一篇文章"C# VS2012创建word文档.(一)"中我们讲述了如何使用VS2012引用COM中Miscrosoft Word 14.0 Object Library实现创建 ...

  8. java 操作 word 表格和样式_poi 操作excel和word(修改样式和内容)

    poi 操作excel和word(修改样式和内容) package com.zhibei.utils; import com.sun.scenario.effect.impl.sw.sse.SSEBl ...

  9. Java操作Word文档添加水印(文字/图片)

    水印是一种常用于各种文档的声明.防伪手段,一般可设置文字水印或者加载图片作为水印.以下内容将分享通过Java编程给Word文档添加水印效果的方法. 使用工具:Free Spire.Doc for Ja ...

  10. python操作word文件_利用PYTHON操作WORD文档

    office 2007 中不能直接打开 VB 编辑器,请按 Alt + F11 打开. import win32com.client # 导入脚本模块 WordApp = win32com.clien ...

最新文章

  1. python中opencv安装_怎么为python安装opencv模块-百度经验
  2. FFMPEG avformat_open_input
  3. DLL入门浅析(3)——从DLL中导出变量
  4. 【我拼搏的2016】-苦逼运维如何变身为SRE成长经历
  5. 华为简易压缩算法python_Python(9) --实现一个简单的压缩软件/解压软件的功能
  6. 去年计算机试题,微机去年试卷及答案,广东海洋大学
  7. 真香!腾讯再发阳光普照奖:每人100股,价值超6万!
  8. Python标准库socketserver使用线程混入实现异步TCP服务器
  9. shell脚本报错问题: -bash: ./test.sh: /bin/sh^M: bad interpreter: No such file or directory
  10. linux 下挂载光驱
  11. cad尺寸标注快捷键_CAD快速标注方法你知道几种?
  12. YYH的营救计划(NOIP模拟赛Round 6)
  13. 高数定理、法则(持续添加)
  14. 人工智能工程师要具备的5项基本技能
  15. 工银亚洲见证开户详细过程和攻略
  16. mysql数据库加锁语句_sql语句对数据库表进行加锁和解锁
  17. 高数 | 【概念剖析】多元函数的偏导数、方向导数、梯度以及微分之间的关系
  18. 将IMYWebLoader添加到蚂蚁mpaas框架中引发的问题和解决的问题
  19. byte[]与String互转对象和JSON相互转
  20. 程序员进阶之排错和避坑方法GitChat将要出炉

热门文章

  1. coldfusion_为ColdFusion辩护
  2. Drupal 建站
  3. win7访问计算机需要密码,win7访问win10系统时需要输入用户名密码解决方法
  4. IPFS时代来临,FIL WORLD重赋存储灵魂
  5. 720度全景拍摄详细教程
  6. 基于android的手机选课系统的实现
  7. python实现txt文本文档批量转为可编辑的pdf文档
  8. 数仓建模—国产建模工具神器
  9. Android布局总汇篇(XXXLayout)
  10. 人生需要执著——从二本三战到985博士