【问题标题】:Django wkhtmltopdf don't reading static filesDjango wkhtmltopdf 不读取静态文件
【发布时间】:2013-10-27 01:13:06
【问题描述】:

我将 wkhtmltopdf 与 django-wkhtmltopdf 一起使用,我认为我错误地提供了静态文件。 如果我从控制台运行 wkhtmltopdf 会正确收集静态文件并生成一个好的 pdf 文件:

wkhtmltopdf http://127.0.0.1:8000/dash/test/ test.pdf

“GET /static/base/js/jquery.js HTTP/1.1”200 93106

“GET /static/base/css/bootstrap.css HTTP/1.1”200 119892

“GET /static/base/js/bootstrap.min.js HTTP/1.1”200 27726

“GET /static/dash/css/flot.css HTTP/1.1”200 1810

“GET /static/dash/js/jquery.flot.categories.js HTTP/1.1”200 6033

“GET /static/dash/js/jquery.flot.js HTTP/1.1”200 119052

但是,如果使用 django-wkhtmltopdf 从您的应用程序生成的 PDF 文件我只有:

"GET /dash/test/ HTTP/1.1" 200 13246004

生成的 PDF 文件如下所示:

settings.py中的静态文件我设置如下:

MEDIA_ROOT = ''

MEDIA_URL = ''

STATIC_ROOT = '/Users/malt/Django/env/app/static/'

STATIC_URL = '/static/'

STATICFILES_DIRS = ( )

STATICFILES_FINDERS = ( )

我还应该检查什么?

【问题讨论】:

  • 你可以试试 wkhtmltopdf 和 os.system()

标签: django wkhtmltopdf


【解决方案1】:

对于静态文件和所有设置,我使用类似这样的内容(在 settings.py 中):

# settings.py
import os

BASE_DIR = os.path.abspath(os.path.join(os.path.dirname(__file__), '..'))


def ABS_DIR(rel):
    return os.path.join(BASE_DIR, rel.replace('/', os.path.sep))

MEDIA_ROOT = ABS_DIR('project_name/site_media/')
MEDIA_URL = '/site_media/'
STATIC_ROOT = ABS_DIR('project_name/static/')
STATIC_URL = '/static/'

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)
STATICFILES_DIRS = (
    ABS_DIR('project_static'),
)

在 urls.py 中(它的一部分):

# urls.py
from django.conf import settings
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
from django.conf.urls.static import static

# for dev static files serving
if settings.DEBUG:
    urlpatterns += staticfiles_urlpatterns()
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

它已经过测试并且可以正常工作。也许您对 PDF 类中的路径有疑问?

【讨论】:

  • 它工作正常 - 我有一种很好的感觉,即静态文件的错误。非常感谢您的帮助。
【解决方案2】:

我遇到了类似的问题,我的解决方法是使用完整的网址作为我的STATIC_URL

所以,而不是:

STATIC_URL = '/static/'

我不得不使用:

STATIC_URL = 'http://localhost:8000/static/'

【讨论】:

    猜你喜欢
    • 2019-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-06-14
    • 2020-04-08
    • 2021-08-27
    • 2014-11-10
    • 2011-08-26
    • 2020-06-22
    相关资源
    最近更新 更多