您需要添加完整路径。而不是
<link href="{% static 'css/print.css' %}" rel="stylesheet">
你会使用
<link href="http://localhost/static/css/print.css" rel="stylesheet">
您发现的第二种方法也可以,但是您需要再次使用文件的完整路径,例如:
import os
from django.conf import settings
css = os.path.join(settings.STATIC_ROOT, 'css', 'print.css')
pdfkit.from_file('file.html', css=css)
在后一种情况下,您还需要提供file.html 的完整路径。然而,在 Django 中,您可能宁愿先将file.html 呈现为字符串,然后使用呈现的 html 来创建 PDF。比如:
import os
from django.conf import settings
from django.template.loader import render_to_string
t = render_to_string('file.html', {})
css = os.path.join(settings.STATIC_ROOT, 'css', 'print.css')
pdf = pdfkit.from_string(t, 'file.pdf', css=css)
...或者如果您想返回 PDF 作为响应
from django.http import HttpResponse
pdf = pdfkit.from_string(t, False, css=css)
response = HttpResponse(pdf)
response['Content-Type'] = 'application/pdf'
response['Content-Disposition'] = 'attachment; filename = file.pdf'
return response