Python Django/xhtml2pdf-对象没有属性';编码';

Python Django/xhtml2pdf-对象没有属性';编码';,python,django,pdf,xhtml2pdf,Python,Django,Pdf,Xhtml2pdf,我很难用Django制作pdf。根据我的建议,我遇到了相同的错误。 当我运行以下代码时,我得到的“列表”对象没有属性“encode”,一个pdf保存在媒体文件夹中,但它是一个纯文本文件。 我认为引用的对象是部分queryset @login_required def generate_pdf(request, slug): # Prepare context document = get_object_or_404(Document, slug=slug) section

我很难用Django制作pdf。根据我的建议,我遇到了相同的错误。
当我运行以下代码时,我得到的“列表”对象没有属性“encode”,一个pdf保存在媒体文件夹中,但它是一个纯文本文件。 我认为引用的对象是
部分
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 with 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 a Django HTTP response
    file.seek(0)
    pdf = file.read()
    file.close()            # Don't forget to close the file handle
    return HttpResponse(pdf, mimetype='application/pdf')
cli输出:

<class 'lld.models.Document'>
<type 'list'>
<type 'dict'>
<class 'django.template.backends.django.Template'>
<class 'django.utils.safestring.SafeText'>
<type 'file'>

我简直不敢相信,因为我用的是谷歌字体,我已经哭了好几天,把头发都扯下来了。是的,一旦我从模板中删除了
,错误就消失了

从您提供的信息中很难判断错误的原因,因为您遗漏了很多部分。我建议您尝试使用
--werkzeug
选项。这将在错误页面中为您提供一个交互式调试器,您可以在其中检查每个帧的变量。
Environment:


Request Method: GET
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 at /lld/tesco-greenfield-datacenter-deployment/pdf/
Exception Value: 'list' object has no attribute 'encode'