Добавить CSS в Pdfkit в Django? - PullRequest
0 голосов
/ 09 июня 2018

Я не могу добавить свой CSS в мой код PdfKit.

Обычные статические ссылки в HTML не работают.

<link href="{% static 'css/print.css' %}" rel="stylesheet">

Я вижу этот подход в представлении, ноНе могу найти способ связать файл CSS в Django.

css = 'print.css'
pdfkit.from_file('file.html', css=css)

Также нашел этот ответ для Flask - как сделать то же самое для Django?

Как связать таблицу стилейфайлы в pdfkit в приложении Flask?

Спасибо.

1 Ответ

0 голосов
/ 09 июня 2018

Вам необходимо добавить полный путь.Вместо

<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
...