使用wkhtmltopdf Django生成pdf

时间:2014-06-05 22:33:33

标签: python django pdf wkhtmltopdf

我正在尝试使用此库创建一个pdf,以实现最简单的de docs示例

使用url并直接从模板中渲染,如下所示

url(r'^pdf/$', PDFTemplateView.as_view(template_name='my_template.html',
                                       filename='my_pdf.pdf'), name='pdf'),

这是模板文件的html

<!DOCTYPE html>
<html>
 <head>
    <title>Hello Wold</title>
 </head>
    <body>
       <p>My First Pdf</p>
     </body>
</html>

但是当我尝试网址时 错误是这个

  

/ pdf /中的AttributeError'NoneType'对象没有属性'endswith'

我该如何解决呢?

这是Traceback

  

回溯:文件   “/usr/local/lib/python2.7/dist-packages/django/core/handlers/base.py”   在get_response中     139. response = response.render()文件“/usr/local/lib/python2.7/dist-packages/django/template/response.py”   在渲染中     105. self.content = self.rendered_content文件“/usr/local/lib/python2.7/dist-packages/wkhtmltopdf/views.py”in   rendered_content     123. delete =(not debug)File“/usr/local/lib/python2.7/dist-packages/wkhtmltopdf/views.py”in   render_to_temporary_file     78. content = make_absolute_paths(content)文件“/usr/local/lib/python2.7/dist-packages/wkhtmltopdf/utils.py”in   make_absolute_paths     151.如果不是x ['root']。endswith('/'):

     

异常类型:/ pdf / Exception值中的AttributeError:'NoneType'   对象没有属性'endswith'

环境:

请求方法:GET

Django Version: 1.6.2
Python Version: 2.7.3
Installed Applications:
    ('django.contrib.admin',
     'django.contrib.auth',
     'django.contrib.contenttypes',
     'django.contrib.sessions',
     'django.contrib.messages',
     'django.contrib.staticfiles',
     'south',
     'rest_framework',
     'cian',
     'django_extensions',
     'wkhtmltopdf')
Installed Middleware:
    ('django.contrib.sessions.middleware.SessionMiddleware',
     'django.middleware.common.CommonMiddleware',
     'django.middleware.csrf.CsrfViewMiddleware',
     'django.contrib.auth.middleware.AuthenticationMiddleware',
     'django.contrib.messages.middleware.MessageMiddleware',
     'django.middleware.clickjacking.XFrameOptionsMiddleware')

这是django-wkhtmltopd错误的屏幕截图

enter image description here

3 个答案:

答案 0 :(得分:4)

发生此错误是因为wkhtmltopdf使用settings.py的STATIC_ROOT中的路径生成pdf文件。 尝试为STATIC_ROOT指定一个值并进行测试。

STATIC_ROOT = 'path.to.your.static.directory'

答案 1 :(得分:1)

您的根路径似乎有问题。尝试在Django设置文件(settings.py)中设置STATIC_URL

答案 2 :(得分:0)

错误是我没有在settings.py中定义我的media_root和media_url,包装器期望你有static_root,media_root,static_url和media_url可以工作