Django使用python-docx-template,並根據模板來生成有數據的word文檔


1、首先,必須安裝docxtpl,使用下面命令,其中會下載對應的相關依賴包:

pip install docxtpl

2、安裝成功后,即可開始編碼:

(1)、首先呢,要先生成一個模板文件,這個模板文件必須為docx的,如果是doc的話,要先轉格式,不然會報以下錯誤:

docx.opc.exceptions.PackageNotFoundError: Package not found at 'E:\student_project\student\media/user/user_template/test模板.doc'

(2)、新建一個空的docx文檔,命名為test模板.docx,里面輸入一行內容:{{ text }},放在student項目底下的media/user/user_template目錄底下,代碼如下:

  1.  
    from student.settings import MEDIA_ROOT
  2.  
    from django.shortcuts import render
  3.  
    from docxtpl import DocxTemplate
  4.  
     
  5.  
    def post(self, request):
  6.  
    base_url = MEDIA_ROOT + '/user/user_template/'
  7.  
    asset_url = base_url + 'test模板.docx'
  8.  
    tpl = DocxTemplate(asset_url)
  9.  
    context = { 'text': '哈哈哈,來啦'}
  10.  
    tpl.render(context)
  11.  
    tpl.save(base_url + 'test.docx')
  12.  
    return render(request, "user/user_info.html", content)

(3)、之后就會在模板相同的路徑底下生成一個test.docx文檔,打開即可看到我們代碼底下的數據填充進模板了:

3、接下來,來試一下如何新建一個表格,把數據填充進去

(1)、首先修改一下那個test模板.docx,修改后如下:

{{ text }}

序號

{%tc for col in user_labels %}

{{ col }}

{%tc endfor %}

                                           {%tr for item in user_list %}

{{ item.number }}

{%tc for col in item.cols %}

{{ col}}

{%tc endfor %}

                                                      {%tr endfor %}

 

word文檔中是這樣的表格:

(2)、修改代碼如下:

  1.  
    from student.settings import MEDIA_ROOT
  2.  
    from django.shortcuts import render
  3.  
    from docxtpl import DocxTemplate
  4.  
     
  5.  
    def post(self, request):
  6.  
    base_url = MEDIA_ROOT + '/user/user_template/'
  7.  
    asset_url = base_url + 'test模板.docx'
  8.  
    tpl = DocxTemplate(asset_url)
  9.  
    context = { 'text': '哈哈哈,來啦'}
  10.  
    user_labels = [ '姓名', '年齡', '性別', '入學日期']
  11.  
    context[ 'user_labels'] = user_labels
  12.  
    user_dict1 = { 'number': 1, 'cols': ['林小熊', '27', '男', '2019-03-28']}
  13.  
    user_dict2 = { 'number': 2, 'cols': ['林小花', '27', '女', '2019-03-28']}
  14.  
    user_list = []
  15.  
    user_list.append(user_dict1)
  16.  
    user_list.append(user_dict2)
  17.  
    context[ 'user_list'] = user_list
  18.  
    tpl.render(context)
  19.  
    tpl.save(base_url + 'test.docx')
  20.  
    return render(request, "user/user_info.html", content)

(3)、之后便可以成功將數據填充進表格中,如下圖所示:

4、其中模板可以添加進你所需要的內容,之后可以把數據庫查詢出來的字段,或者表單提交錄入的字段填充進模板中,大家可以試一下,其中,注意路徑如果出現錯誤,也會報之前類似的錯誤,比如我修改上面中的一行代碼:

base_url = '/user/user_template/'

就會報錯:docx.opc.exceptions.PackageNotFoundError: Package not found at 'user/user_template/test模板.docx'

5、以上內容,僅供學習參考,謝謝!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM