Вам необходимо добавить полный путь.Вместо
<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