接受django模板的zipfile子类
django-zipfile的Python项目详细描述
使用django模板的zipfile.Zipfile的子类。
用法:
from zipfile import ZIP_DEFLATED from django_zipfile import TemplateZipFile def myview(request, object_id): obj = get_object_or_404(MyModel, pk=object_id) context = { 'object': obj } response = HttpResponse(mimetype='application/octet-stream') response['Content-Disposition'] = 'attachment; filename=myfile.zip' container = TemplateZipFile(response, mode='w', compression=ZIP_DEFLATED, template_root='myapp/myzipskeleton/') container.write_template('mimetype') container.write_template('META-INF/container.xml') container.write_template('chapter1.html', context=context) container.close() return response
还可以为模板指定多个根:
container = TemplateZipFile(response, mode='w', compression=ZIP_DEFLATED, template_root=['myapp/myzipskeleton/override/', 'myapp/myzipskeleton/default/'])
以及添加文件时的多个模板:
container.write_template(['override.html', 'default.html'], filename="chapter1.html")
templatezipfile将按指定顺序查找模板,首先按根目录,然后按模板名称。例如:
myzipfile = TemplateZipFile(response, mode='w', compression=ZIP_DEFLATED, template_root=['override/', 'default/']) myzipfile.write_template(['two.txt', 'one.txt'], filename='myfile.txt') # Will use the first existing template from ['override/two.txt', 'override/one.txt', 'default/two.txt', 'default/one.txt']
如果找不到模板,^ {TT2}$将引发一个TeMeTeDeEntExtistor错误。
可以使用optional=True
将文件指定为可选文件myzipfile.write_template(['two.txt', 'one.txt'], filename='myfile.txt', optional=True)这样做会悄悄地吞下那个例外的例外。