如何从django获取渲染后的模板?-pdfkit
How to get the rendered template from django?-pdfkit
我的 Django 应用程序中有一个模板,我需要将其呈现在变量中或将其保存在 html 文件中。
我的目标是将模板的 html 渲染转换为 pdf,我正在使用 pdfkit,因为它是我见过的最好的 html 到 pdf 转换器,reportlab 不做我的工作想要。
当我尝试做这样的事情时:
pdf = pdfkit.from_file ('app / templates / app / table.html', 'table.pdf')
我得到了 pdf,但打印出来的是这样的:
enter image description here
感谢任何帮助!
from django.template.loader import get_template, render_to_string
使用上面的方法导入 return 模板的函数。 get_template
return 是模板对象,而 render_to_string
return 是渲染模板的字符串。这是我使用 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
这是我使用 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
我的 Django 应用程序中有一个模板,我需要将其呈现在变量中或将其保存在 html 文件中。
我的目标是将模板的 html 渲染转换为 pdf,我正在使用 pdfkit,因为它是我见过的最好的 html 到 pdf 转换器,reportlab 不做我的工作想要。
当我尝试做这样的事情时:
pdf = pdfkit.from_file ('app / templates / app / table.html', 'table.pdf')
我得到了 pdf,但打印出来的是这样的:
enter image description here
感谢任何帮助!
from django.template.loader import get_template, render_to_string
使用上面的方法导入 return 模板的函数。 get_template
return 是模板对象,而 render_to_string
return 是渲染模板的字符串。这是我使用 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
这是我使用 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