Python Web开发:动态生成Word文档
来自CloudWiki
前期回顾
在前面的内容中,
当招聘人员保存审批结果时,系统自动给当事人发送邮件:
下面我们改一改,当系统通过时,自动生成Word版简历.
实训步骤
安装库
pip install docxtpl
编写Word模板
制作Word模板文件,在指定位置插入模板标签,使用模板标签{{模板变量}}来声明
在media/contact文件夹下创建一个简历模板文件recruit.docx
修改信号触发器
from django.db.models.signals import post_init, post_save from django.dispatch import receiver from django.dispatch import receiver from django.core.mail import send_mail import os from docxtpl import DocxTemplate from docxtpl import InlineImage from docx.shared import Mm, Inches, Pt @receiver(post_init, sender=Resume) def before_save_resume(sender, instance, **kwargs): instance.__original_status = instance.status @receiver(post_save, sender=Resume) def post_save_resume(sender, instance, **kwargs): email = instance.email # 应聘者邮箱 EMAIL_FROM = '458976849@qq.com' # 企业QQ邮箱 if instance.__original_status == 1 and instance.status == 2: email_title = '通知:云计算科技与艺术协会招聘初试结果' email_body = '恭喜您通过本社团初试' send_status = send_mail(email_title, email_body, EMAIL_FROM, [email]) template_path = os.getcwd() + '/media/contact/recruit.docx' #模板文件 template = DocxTemplate(template_path) # 从instance实例中获取当前简历字段信息 name = instance.name personID = instance.personID sex = instance.sex email = instance.email birth = instance.birth edu = instance.edu school = instance.school major = instance.major position = instance.position experience = instance.experience photo = instance.photo context = { 'name': name, 'personID': personID, 'sex': sex, 'email': email, 'birth': birth, 'edu': edu, 'school': school, 'major': major, 'position': position, 'experience': experience, 'photo': InlineImage(template, photo, width=Mm(30), height=Mm(40)), } template.render(context) filename = '%s/media/contact/recruit/%s_%d.docx' % ( os.getcwd(), instance.name, instance.id) template.save(filename) elif instance.__original_status == 1 and instance.status == 3: email_title = '通知:云计算科技与艺术协会招聘初试结果' email_body = '很遗憾,您未能通过本社团初试,感谢您的关注' send_status = send_mail(email_title, email_body, EMAIL_FROM, [email])