我是靠谱客的博主 拉长火,这篇文章主要介绍django2.0+xadmin2.0 导出选项增加导出WORD功能,现在分享给大家,希望可以做个参考。

开发中使用的ide是pycharm
如果根据自己需求对一些功能进行修改, 建议使用源码安装xadmin

这篇是我自己在开发中的思路方法, 有些地方比较死板笨拙, 没想到什么好的方法, 如果有好的建议, 请多多指点一下

xadmin自带的导出模块中有xlsx, xls, csv, xml, json 这几种格式, 但是我这里有个需求是需要导出world, 所以需要自己增加此功能, 也就需要对xadmin源码进行调整增加

首先看原测试页面中导出功能:
原始导出中没有	WORD
按照标签名, 全局查找到有xlsx(随便查找哪一个)的地方, 发现有此参数的地方并不多, 找到xadmin源码路径下)的文件xadmin/plugins/export.py有两个地方含有xlsx:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 第40行 # 根据类名可以判断, 这里是导出栏选项 class ExportMenuPlugin(BaseAdminPlugin): list_export = ('xlsx', 'xls', 'csv', 'xml', 'json') export_names = {'xlsx': 'Excel 2007', 'xls': 'Excel', 'csv': 'CSV', 'xml': 'XML', 'json': 'JSON'} # 第60行 # 这一个类则是选中导出类型后对应的方法 class ExportPlugin(BaseAdminPlugin): export_mimes = {'xlsx': 'application/vnd.ms-excel', 'xls': 'application/vnd.ms-excel', 'csv': 'text/csv', 'xml': 'application/xhtml+xml', 'json': 'application/json', }

这两个地方都按照原格式要加上我需要的WORD:

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
class ExportMenuPlugin(BaseAdminPlugin): # fixme 导出栏增加 docx list_export = ('xlsx', 'xls', 'csv', 'xml', 'json', 'docx') export_names = {'xlsx': 'Excel 2007', 'xls': 'Excel', 'csv': 'CSV', 'xml': 'XML', 'json': 'JSON', 'docx': 'WORD'} class ExportPlugin(BaseAdminPlugin): export_mimes = {'xlsx': 'application/vnd.ms-excel', 'xls': 'application/vnd.ms-excel', 'csv': 'text/csv', 'xml': 'application/xhtml+xml', 'json': 'application/json', 'docx': 'application/word'}

保存刷新, 可以看到测试页面导出选项栏上已经有了WORD选项:
导出栏WORD选项
但是现在只是添加了这个选项名, 还并没有实际实现导出功能
继续往类ExportPlugin下面看, 会发现诸如一些get_xlsx_export,get_xml_export等方法,这些就是导出保存xls,xml等格式的具体实现, 所以在类ExportPlugin下面随便一个位置, 按照其他方法类似的格式 (我是在方法get_xlsx_export后面, 第173行) 添加上自己的方法get_docx_export及处理逻辑:
注意:这里方法名不能随便取, 必须要保持get_xxx_export的格式xadmin才能正确执行程序, 这里的xxx就是上面选项栏填写的参数, 我这里填的是docx, 所以方法名是get_docx_export

复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# xadmin/plugins/export.py # 处理docx格式文件,需要用到python-docx包, 所以需要pip install python-docx, 并在顶部导入docx from docx import Document from docx.oxml.ns import qn from docx.shared import Inches, Pt """ ... """ class ExportPlugin(BaseAdminPlugin): export_mimes = {'xlsx': 'application/vnd.ms-excel', 'xls': 'application/vnd.ms-excel', 'csv': 'text/csv', 'xml': 'application/xhtml+xml', 'json': 'application/json', 'docx': 'application/word'} # fixme """ .... """ # 第135行 def get_xls_export(self, context): datas = self._get_datas(context) output = io.BytesIO() export_header = ( self.request.GET.get('export_xls_header', 'off') == 'on') model_name = self.opts.verbose_name """ ... """ # 第173行, 这是我添加的自己的处理docx的方法及逻辑 def get_docx_export(self, context): datas = self._get_datas(context) output = io.BytesIO() # model_name是仿照上面get_xls_export添加的参数, 但是我自己并没用到 # model_name = self.opts.verbose_name file = Document() # 因为我这里对导出内容并没有多少要求, 所以word样式处理的比较简单 file.styles['Normal'].font.name = u'微软雅黑' file.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), u'微软雅黑') file.styles['Normal'].font.size = Pt(10) # file.add_paragraph().paragraph_format.space_before = Pt(10) head = datas[0] # 这里取datas[1:]的原因是datas第一列数据是表头,而我不需要导出,所以直接舍去表头 for rowx, row in enumerate(datas[1:]): # print(rowx, row) for colx, value in enumerate(row): if head[colx] == '是否违法': is_standard = '' if value: is_standard = '是' else: is_standard = '否' file.add_paragraph('%s: %s' % (head[colx], is_standard)) elif head[colx] == '支付截图': file.add_paragraph('支付截图: ') imgs = list(JsqBasic.objects.filter(name=row[0]).values('image')) if imgs[0]['image']: file.add_picture('%s/%s' % (settings.MEDIA_ROOT, imgs[0]['image']), width=Inches(1.5)) # 数字越大,图片越大 elif head[colx] == '访问截图': file.add_paragraph('访问截图: ') imgs = VisitImg.objects.filter(name=row[0]).values('image') if imgs: for img in imgs: file.add_picture('%s/%s' % (settings.MEDIA_ROOT, img['image']), width=Inches(1.25)) else: file.add_paragraph('%s: %s' % (head[colx], value)) file.save(output) return output.getvalue()

保存刷新测试页面, 选择数据导出word保存成功, 大功告成

最后

以上就是拉长火最近收集整理的关于django2.0+xadmin2.0 导出选项增加导出WORD功能的全部内容,更多相关django2.0+xadmin2.0内容请搜索靠谱客的其他文章。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(62)

评论列表共有 0 条评论

立即
投稿
返回
顶部