为了实现此功能,需要用到的知识点:

(1)django  admin  自定义字段;

    参考:http://www.cnblogs.com/wumingxiaoyao/p/6928297.html

(2)使用 docxtpl 模块 对word文档内容 进行替换;

    参考:http://www.cnblogs.com/wumingxiaoyao/p/8315814.html

(3)使用django 的  FileResponse 模块 实现文档下载;

参考:http://blog.csdn.net/lmw1239225096/article/details/79047375

主要代码:

url.py:

from django.conf.urls import url
from hys_operation import views urlpatterns = [
# url(r'^sub_users/(?P<obj_id>\d+)', views.get_sub_users),
# url(r'^sub_servers/(?P<obj_id>\d+)', views.get_sub_servers),
url(r'^download/(?P<paper_num>\w+)', views.download, name='download'),
]

views.py:

from django.http import FileResponse

def download(request, paper_num):
"""
下载数据备案单
:param request:
:param paper_num: 备案单号
:return: 数据流
"""
# file_path = '/webserver/hys_cmdb/static/download/'
file_path = 'E:\\myweb\\hys_cmdb\\static\\download\\'
file = open("{}{}.docx".format(file_path, paper_num), "rb")
response = FileResponse(file)
response['Content-Type'] = 'application/octet-stream'
response['Content-Disposition'] = 'attachment;filename="{}.docx"'.format(paper_num)
return response

admin.py:

class DataPaperStoreAdmin(admin.ModelAdmin):

    ......

    def down_paper(self, obj):
"""自定义一个a标签,跳转到实现下载功能的url"""
dest = '{}export/'.format(obj.pk)
title = '下载'
return '<a href="{}">{}</a>'.format(dest, title)
down_paper.short_description = '下载数据单'
down_paper.allow_tags = True def get_urls(self):
"""添加一个url,指向实现下载功能的函数make_docx"""
from django.conf.urls import url
urls = [
url('^(?P<pk>\d+)export/?$',
self.admin_site.admin_view(self.make_docx),
name='export_data'),
]
return urls + super(DataPaperStoreAdmin, self).get_urls() def make_docx(self, request, *args, **kwargs):
from docxtpl import DocxTemplate
import re
file_path = 'E:\\myweb\\hys_cmdb\\static\\download\\'
# file_path = '/webserver/hys_cmdb/static/download/'
obj = get_object_or_404(DataPaperStore, pk=kwargs['pk'])
list_nums = re.findall("\d+", obj.paper_num) # 获取字符串中的所有数字
nums = ''.join(list_nums)
doc = DocxTemplate("{}export.docx".format(file_path))
context = {'paper_num': obj.paper_num,
'project_name': obj.project_name,
'to_mail': obj.to_mail,
'data_selected': obj.data_selected,
'start_date': obj.start_date,
'end_date': obj.end_date,
}
doc.render(context)
doc.save("{}{}.docx".format(file_path, nums))
new_path = reverse('download', args=(nums,))
return HttpResponseRedirect(new_path) list_display = ('project_name', 'to_mail', 'proposer', 'frequency', 'commit_date',
'start_date', 'end_date', 'colored_paper_num', 'is_sure', 'expired', 'down_paper',)

  

效果:

django admin 中实现word文档下载的更多相关文章

  1. C# 中使用Word文档对图像进行操作

    C# 中使用Word文档对图像进行操作 Download Files: ImageOperationsInWord.zip 简介 在这篇文章中我们可以学到在C#程序中使用一个Word文档对图像的各种操 ...

  2. 如何在程序中给word文档加上标和下标

    如何在程序中给word文档加上标和下标 上标或下标是一个小于普通行格式的数字,图形,标志或者指示通常它的设置与行相比偏上或偏下.下标通常显示于或者低于基准线,而上标则高于.上标和下标通常被用于表达公式 ...

  3. 在Delphi中处理word文档与数据库的互联 1

    在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...

  4. 在Delphi中处理word文档与数据库的互联

    在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...

  5. c#中操作word文档-四、对象模型

    转自:http://blog.csdn.net/ruby97/article/details/7406806 Word对象模型  (.Net Perspective) 本文主要针对在Visual St ...

  6. SpringBoot+FreeMarker开发word文档下载,预览

    背景: 开发一个根据模版,自动填充用户数据并下载word文档的功能 使用freemarker进行定义模版,然后把数据进行填充. maven依赖: <parent> <groupId& ...

  7. ASP.NET MVC 拓展ViewResult实现word文档下载

      最近项目中有同事用到word文档导出功能,遇到了一些导出失败问题,帮其看了下解决问题的同事,看了下之前的代码发现几个问题: 代码编写不规范,word导出功能未收口 重复代码导出都是 实现逻辑比较复 ...

  8. c#中操作word文档-一、模板方式写入

    转载自:http://blog.csdn.net/fujie724/article/details/5443322 适合模板写入 今天正好有人问我,怎么生成一个报表式的Word文档. 就是文字的样式和 ...

  9. 在C#中创建word文档

    在下面文档中  首先引用word组件:Microsoft.Office.Interop.Word 在头文件中写上 using Word = Microsoft.Office.Interop.Word; ...

随机推荐

  1. 很让人受教的提高php代码质量的方法

    1.不要使用相对路径 常常会看到: require_once('../../lib/some_class.php'); 该方法有很多缺点: 它首先查找指定的php包含路径, 然后查找当前目录. 因此会 ...

  2. EM算法定义及推导

    EM算法是一种迭代算法,传说中的上帝算法,俗人可望不可及.用以含有隐变量的概率模型参数的极大似然估计,或极大后验概率估计 EM算法定义 输入:观测变量数据X,隐变量数据Z,联合分布\(P(X,Z|\t ...

  3. BZOJ1229 USACO2008 Nov toy 玩具 【三分+贪心】*

    BZOJ1229 USACO2008 Nov toy 玩具 Description 玩具 [Chen Hu, 2006] Bessie的生日快到了, 她希望用D (1 <= D <= 10 ...

  4. (2/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序

    每次使用 Visual Studio 的模板创建一个 UWP 程序,我们会在项目中发现大量的项目文件.配置.应用启动流程代码和界面代码.然而这些文件在 UWP 程序中到底是如何工作起来的? 我从零开始 ...

  5. 实用且堪称神器的Chrome插件推荐

    前言 相信很多人都在使用 Chrome 浏览器,其流畅的浏览体验得到了不少用户的偏爱,但流畅只是一方面, Chrome 最大的优势还是其支持众多强大好用的扩展程序(Extensions).最近为了更好 ...

  6. Docker生态概览

    百花齐放的容器技术 虽然 docker 把容器技术推向了巅峰,但容器技术却不是从 docker 诞生的.实际上,容器技术连新技术都算不上,因为它的诞生和使用确实有些年头了.下面的一串名称肯能有的你都没 ...

  7. [LeetCode系列]链表环探测问题II

    给定一个链表头, 探测其是否有环, 如果没有返回NULL, 如果有返回环开始的位置. 环开始的位置定义为被两个指针指向的位置. 算法描述: 1. 快慢指针遍历, 如果到头说明无环返回NULL, 如果相 ...

  8. 字符串全排列 java实现

    经常会遇到字符串全排列的问题.例如:输入为{‘a’,’b’,’c’},则其全排列组合为abc,acb,bac,bca,cba,cab.对于输入长度为n的字符串数组,全排列组合为n!种. package ...

  9. 记录:Web无引用无配置方式动态调用WCF服务

    这几年一直用WebApi较多,最近项目中有个需求比较适合使用WCF,以前也用过JQuery直接调用Wcf的,但是说实话真的忘了… 所以这次解决完还是花几分钟记录一下 WCF服务端:宿主在现有Win服务 ...

  10. AT命令控制上网 PDP

    1. AT+CGATT=1 (Attach or detach from GPRS service, GPRS 附着状态) 说的简单点,这一步就是让SGSN (服务GPRS节点,你可以把它理解成与基站 ...