Как получить отрендеренный шаблон от django? -Pdfkit - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть шаблон в моем приложении django, и мне нужно, чтобы он отображался в переменной или сохранялся в html-файле.

Моя цель - преобразовать рендеринг html-шаблона в pdf.Я использую pdfkit, так как это лучший конвертер html в pdf, который я когда-либо видел, reportlab не делает то, что я хочу.

Когда я пытаюсь сделать что-то вроде этого:

pdf = pdfkit.from_file ('app / templates / app / table.html', 'table.pdf')

Я получаюPDF, но напечатать что-то вроде этого:

введите описание изображения здесь

Я ценю любую помощь!

Ответы [ 2 ]

0 голосов
/ 16 мая 2018

Это решение для моего случая, в котором я использую django 2.0.1 и pdfkit 0.6.1:

. Чтобы получить шаблон:

template = get_template ('plapp / person_list.html')

Чтобы отобразить его с данными:

html = template.render ({'persons': persons})

Для продолжения определения метода в views.py, тот, который загружает PDF непосредственно в браузер:

def pdf(request):
    persons = Person.objects.all()
    template = get_template('plapp/person_list.html')
    html = template.render({'persons': persons})
    options = {
        'page-size': 'Letter',
        'encoding': "UTF-8",
    }
    pdf = pdfkit.from_string(html, False, options)
    response = HttpResponse(pdf, content_type='application/pdf')
    response['Content-Disposition'] = 'attachment;
    filename="pperson_list_pdf.pdf"'
    return response    
0 голосов
/ 03 мая 2018
from django.template.loader import get_template, render_to_string

Используйте выше для импорта функций, которые возвращают шаблон. get_template возвращает объект шаблона, в то время как render_to_string возвращает строку отображаемого шаблона. Вот как я это делаю, используя weasyprint, а не pdfkit.

def weasy_pdf_generation(request, id):
    # my data
    _, _, draft_details = get_draft_details('setup', request, id)
    radios_dict = {k:v[1] for k,v in draft_details.items()}
    # rendering to string
    html_template = render_to_string('tax/setupreview report.html', radios_dict)
    styles = CSS(url="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css")
    pdf_file = HTML(string=html_template).write_pdf(stylesheets=[styles])

    #response details
    response = HttpResponse(pdf_file, content_type='application/pdf')
    response['Content-Disposition'] = 'filename="home_page.pdf"'
return response
...