python - Django / xhtml2pdf - object has no attribute 'encode' -
i'm having hard time producing pdf's in django. per previous question i'm running same error.
when run following code 'list' object has no attribute 'encode'
, pdf saved in media folder plain text file. think object being referred sections
queryset.
@login_required def generate_pdf(request, slug): # prepare context document = get_object_or_404(document, slug=slug) sections = \ get_list_or_404(section.objects.filter (associated_document__startswith=document.slug)) data = {'document': document, 'sections': sections} # render html content through html template context template = get_template('lld/lld_pdf.html') html = template.render(context(data)) file = open('/home/project/media/test.pdf', "w+b") print type(document) print type(sections) print type(data) print type(template) print type(html) print type(file) pisastatus = pisa.createpdf(html.encode('utf-8'), dest=file) # return pdf document through django http response file.seek(0) pdf = file.read() file.close() # don't forget close file handle return httpresponse(pdf, mimetype='application/pdf')
cli output:
<class 'lld.models.document'> <type 'list'> <type 'dict'> <class 'django.template.backends.django.template'> <class 'django.utils.safestring.safetext'> <type 'file'>
and error:
environment: request method: request url: http://localhost:8001/lld/tesco-greenfield-datacenter-deployment/pdf/ django version: 1.8.2 python version: 2.7.6 installed applications: ('django_admin_bootstrapped', 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'lld', 'registration') installed middleware: ('django.contrib.sessions.middleware.sessionmiddleware', 'django.middleware.common.commonmiddleware', 'django.middleware.csrf.csrfviewmiddleware', 'django.contrib.auth.middleware.authenticationmiddleware', 'django.contrib.auth.middleware.sessionauthenticationmiddleware', 'django.contrib.messages.middleware.messagemiddleware', 'django.middleware.clickjacking.xframeoptionsmiddleware', 'django.middleware.security.securitymiddleware') traceback: file "/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py" in get_response 132. response = wrapped_callback(request, *callback_args, **callback_kwargs) file "/usr/local/lib/python2.7/dist-packages/django/contrib/auth/decorators.py" in _wrapped_view 22. return view_func(request, *args, **kwargs) file "/home/vagrant/shared/repeatabledesign/lld/views.py" in generate_pdf 162. pisastatus = pisa.createpdf(html.encode('utf-8'), dest=file) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/document.py" in pisadocument 89. encoding, context=context, xml_output=xml_output) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/document.py" in pisastory 57. pisaparser(src, context, default_css, xhtml, encoding, xml_output) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/parser.py" in pisaparser 685. context.parsecss() file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/context.py" in parsecss 498. self.css = self.cssparser.parse(self.csstext) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/w3c/cssparser.py" in parse 434. src, stylesheet = self._parsestylesheet(src) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/w3c/cssparser.py" in _parsestylesheet 522. src, stylesheetimports = self._parseatimports(src) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/w3c/cssparser.py" in _parseatimports 606. stylesheet = self.cssbuilder.atimport(import_, mediums, self) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/w3c/css.py" in atimport 874. return cssparser.parseexternal(import_) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/context.py" in parseexternal 380. result = self.parse(cssfile.getdata()) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/w3c/cssparser.py" in parse 434. src, stylesheet = self._parsestylesheet(src) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/w3c/cssparser.py" in _parsestylesheet 533. src, atresults = self._parseatkeyword(src) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/w3c/cssparser.py" in _parseatkeyword 655. src, result = self._parseatfontface(src) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/w3c/cssparser.py" in _parseatfontface 785. result = [self.cssbuilder.atfontface(properties)] file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/context.py" in atfontface 173. src = self.c.getfile(data["src"], relative=self.c.cssparser.rootpath) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/context.py" in getfile 823. return getfile(name, relative or self.pathdirectory) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/util.py" in getfile 635. file = pisafileobject(*a, **kw) file "/usr/local/lib/python2.7/dist-packages/xhtml2pdf/util.py" in __init__ 516. uri = uri.encode('utf-8') exception type: attributeerror @ /lld/tesco-greenfield-datacenter-deployment/pdf/ exception value: 'list' object has no attribute 'encode'
i can't believe i've spent few days crying , tearing hair out because using google font. yep, once removed <link href="http://fonts.googleapis.com/css?family=lato:400,700" rel="stylesheet" type="text/css">
template, error vamoosed!
Comments
Post a Comment