This view will enable you to generate OpenOffice documents from templates written in OpenOffice 2.x
Just make sure that there is no OO tag in between your code (no change in formatting etc.). content.xml is a valid XML file, so you can do some preprocessing using xml.dom.minidom. I would also recommend caching (just save the zip file without content.xml and content.xml on its own).
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 | import zipfile
import StringIO
from django import http
from django.template import Context, Template
def print_odf( request, odf_path, context ):
"""
odf_path - path to the template document
context - dictionary to create context from
"""
c = Context()
for key, value in context.items():
if callable( value ):
c[key] = value()
else:
c[key] = value
# default mimetype
mimetype = 'application/vnd.oasis.opendocument.text'
# ODF is just a zipfile
input = zipfile.ZipFile( template_name, "r" )
# we cannot write directly to HttpResponse, so use StringIO
text = StringIO.StringIO()
# output document
output = zipfile.ZipFile( text, "a" )
# go through the files in source
for zi in input.filelist:
out = input.read( zi.filename )
# waut for the only interesting file
if zi.filename == 'content.xml':
# un-escape the quotes (in filters etc.)
t = Template( out.replace( '"', '"' ) )
# render the document
out = t.render( c )
elif zi.filename == 'mimetype':
# mimetype is stored within the ODF
mimetype = out
output.writestr( zi.filename, out )
# close and finish
output.close()
return http.HttpResponse( content=text.getvalue(), mimetype=mimetype )
|
More like this
- Template tag - list punctuation for a list of items by shapiromatron 11 months ago
- JSONRequestMiddleware adds a .json() method to your HttpRequests by cdcarter 11 months, 1 week ago
- Serializer factory with Django Rest Framework by julio 1 year, 5 months ago
- Image compression before saving the new model / work with JPG, PNG by Schleidens 1 year, 6 months ago
- Help text hyperlinks by sa2812 1 year, 7 months ago
Comments
HttpResponse can take file-likes directly:
#
thanks, I updated the snippet
#
Line 23 should probably use "odf_path" instead of "template_name".
#
See https://github.com/NetAngels/django-webodt
#
Please login first before commenting.