Python Django中 excel转成html 可以直接预览

上篇文章写了Python怎么预览Excel, 因为我Django是Python常用的开发框架,那在Django 中怎么预览呐?
话不多说,直接贴代码

URL:

re_path('load_excel/', views.load_excel, name='load_excel'),

VIEWS:

from Personnel.models import Contract
import pandas
from django.shortcuts import render
def load_excel(request):
    if request.method == 'GET':
        # 获取前台传过来的id值,判断文件的类型是不是excel。
        id = request.GET.get('id')
        contract_type = Contract.objects.filter(contract_id=id).first().contract_type
        if contract_type == 'excel':
            # 从数据库中获取文件的存的path,
            path_obj = Contract.objects.filter(contract_id=id).first().contract_content
            contract_name = Contract.objects.filter(contract_id=id).first().contract_name
            # 重命名并指定路径{ 将文件写入template文件夹中,因为我们的Django项目静态页面都是存放在这个文件夹下面}
            new_file_name = "template/"+contract_name.split('.')[0]+'.html'
            html_path = new_file_name.split('/')[1]

            # 通过pandas.ExcelFie函数,将excel文件转成html
            xd = pandas.ExcelFile(path_obj)
            df = xd.parse()
            html = df.to_html(header=True,index=True)
            # 将转换后的html写入,一定要加编码方式utf-8,要不页面中打开会乱码
            with open(new_file_name,'w',encoding='utf-8') as file:
                file.writelines('<meta charset="UTF-8">\n')
                file.write(html)
    return render(request,html_path,locals())

这里说明以下 我的文件存数据库的时候,是这样的存的。 合同内容那里存的是是文件的绝对路径。
例如: /home/tianchao/PycharmProjects/my site/Personnel/media/upload/001.xls

model.py:

# 合同表
class Contract(models.Model):
    # 合同id
    contract_id = models.AutoField(primary_key=True)
    # 合同名称
    contract_name = models.CharField(max_length=255)
    # 合同编号
    contract_num = models.CharField(max_length=255)
    # 上传人
    contract_author = models.CharField(max_length=255)
    # 上传时间
    contract_upload_time = models.DateTimeField()
    # 合同内容
    contract_content = models.FileField(null=False, upload_to='drawing/%Y%m%d')
    # 合同类别
    contract_type = models.CharField(max_length=30

前端html:
说明:用get传参给后台。

							 {% for a in contract_obj %}
 									<td>{{a.contract_type }}</td>
                                    <td>{{ a.contract_num }}</td>
                                    <td>{{ a.contract_author }}</td>
                                    <td>{{ a.contract_upload_time|date:"Y/n/j" }}
                                        &nbsp;&nbsp;&nbsp;{{ a.contract_upload_time|time|cut:"." }}
                                    </td>
                                    <td>
                                        <button class="layui-btn layui-btn-danger layui-btn-xs"
                                                resource_id="{{ a.contract_id }}"
                                                name="delete_resource">删除
                                        </button>
                                        <a href="/load_excel/?id={{ a.contract_id }}" target="_blank">预览</a>
                                    </td>
                           		{% endfor %}         

这个原理其实就是,将excel文件打开,然后转成html文件,存到django中的template中,因为django中可以通过return render转到html, 所以我们就能实现预览了。

最后预祝大家新年快乐~!!!

发布了2 篇原创文章 · 获赞 2 · 访问量 62
展开阅读全文
评论将由博主筛选后显示,对所有人可见 | 还能输入1000个字符

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 游动-白 设计师: 上身试试

分享到微信朋友圈

×

扫一扫,手机浏览