django admin 中实现word文档下载
为了实现此功能,需要用到的知识点:
(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文档下载的更多相关文章
- C# 中使用Word文档对图像进行操作
C# 中使用Word文档对图像进行操作 Download Files: ImageOperationsInWord.zip 简介 在这篇文章中我们可以学到在C#程序中使用一个Word文档对图像的各种操 ...
- 如何在程序中给word文档加上标和下标
如何在程序中给word文档加上标和下标 上标或下标是一个小于普通行格式的数字,图形,标志或者指示通常它的设置与行相比偏上或偏下.下标通常显示于或者低于基准线,而上标则高于.上标和下标通常被用于表达公式 ...
- 在Delphi中处理word文档与数据库的互联 1
在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...
- 在Delphi中处理word文档与数据库的互联
在Delphi中处理word文档与数据库的互联 ---- 目前,Delphi被越来越多的人选中作为MIS系统开发中的前台工具.在以Delphi为前台,一些大型数据库为后台的MIS系统中,图形的处理不可 ...
- c#中操作word文档-四、对象模型
转自:http://blog.csdn.net/ruby97/article/details/7406806 Word对象模型 (.Net Perspective) 本文主要针对在Visual St ...
- SpringBoot+FreeMarker开发word文档下载,预览
背景: 开发一个根据模版,自动填充用户数据并下载word文档的功能 使用freemarker进行定义模版,然后把数据进行填充. maven依赖: <parent> <groupId& ...
- ASP.NET MVC 拓展ViewResult实现word文档下载
最近项目中有同事用到word文档导出功能,遇到了一些导出失败问题,帮其看了下解决问题的同事,看了下之前的代码发现几个问题: 代码编写不规范,word导出功能未收口 重复代码导出都是 实现逻辑比较复 ...
- c#中操作word文档-一、模板方式写入
转载自:http://blog.csdn.net/fujie724/article/details/5443322 适合模板写入 今天正好有人问我,怎么生成一个报表式的Word文档. 就是文字的样式和 ...
- 在C#中创建word文档
在下面文档中 首先引用word组件:Microsoft.Office.Interop.Word 在头文件中写上 using Word = Microsoft.Office.Interop.Word; ...
随机推荐
- vc 实现一个 http Server
实现 http 的协议解析 以及封装 , 对应不同的访问地址, 调用绑定的处理程序 , #include "stdafx.h" #include "lyocomm\web ...
- 同一台电脑的多ssh 配置
转载自:https://w3ctrain.com/2016/03/06/mutiple-ssh-key/ ps:此文基于你已经能够正常的生成sshkey 对于sshkey的功能这里就不多做介绍了,本文 ...
- BZOJ4245 ONTAK2015 OR-XOR 【位运算+贪心】*
BZOJ4245 ONTAK2015 OR-XOR Description 给定一个长度为n的序列a[1],a[2],…,a[n],请将它划分为m段连续的区间,设第i段的费用c[i]为该段内所有数字的 ...
- HDU2222 Keywords Search 【AC自动机】
HDU2222 Keywords Search Problem Description In the modern time, Search engine came into the life of ...
- asp.net core microservices 架构之 分布式自动计算(一)
一:简介 自动计算都是常驻内存的,没有人机交互.我们经常用到的就是console job和sql job了.sqljob有自己的宿主,与数据库产品有很关联,暂时不提.console job使 ...
- Oracle中用exp/imp命令快速导入导出数据
from: http://blog.csdn.net/wangchunyu11155/article/details/53635602 [用 exp 数 据 导 出]: 1 将数据库TEST完全导出, ...
- 《DSP using MATLAB》示例Example6.6
代码: h = [1, 2, 3, 2, 1]/9; [C, B, A] = dir2fs(h) 运行结果:
- psoc4的capsense总结
psoc4的capsense算是个比较实用的东西,触摸按键,显得有点高大上,呵呵.今天试用了一下,对照着数据手册,现在总结一下. 1,先说原理,官方做文档的时候应该把原理讲一下,不要上来就讲怎么用,怎 ...
- Spring boot admin 使用
1. maven依赖 <dependencies> <dependency> <groupId>org.springframework.boot</group ...
- jsTree 是一个基于Javascript,支持多浏览器的Tree view jQuery插件。
https://www.jstree.com/ 之前给大家介绍两种浮动闭合的办法CSS清除浮动 万能float闭合,得 http://www.daqianduan.com/3606.html