我正在 Django 应用程序中通过 Weasyprint 将 HTML 导出为 PDF。我注意到,如果我将模板 html 发送到前端并将该 html 返回到后端以将其导出为 pdf,它会完美打印。但如果我直接将模板 html 发送到 Weasyprint,一切都会变得混乱!没有CSS,没有JavaScript。
这就是我使用模板生成 html 的方式:
template = loader.get_template('Reporting/reportTemplate.html')
context = {
"reportObj" : result[0]
}
htmlContent = (template.render(context, request))
response['message'] = htmlContent
return JsonResponse(response)
在我的 JS 控制器中,我将 htmlContent 分配给我的 div:
$('#htmlContent').html(response.message);
然后我将生成的 html 返回到我的 Django 函数以打印 pdf
HTML(string=htmlContent).write_pdf(target=response, stylesheets=[CSS(string=getCSS())])
这样它就可以保持设计和一切。
但是当我发送htmlContent
直接到Weasyprint而不发送到前端,设计和着色都消失了!
在我的模板中,我什至包含了 CSS 和 Javascript 文件,如下所示:
{% load static %}
{% block content %}
<link href="{% static "css/ion.rangeSlider.css" %}" rel="stylesheet">
<link href="{% static "css/ion.rangeSlider.skinHTML5.css" %}" rel="stylesheet">
<script type='text/javascript' src='{% static "scripts/ion.rangeSlider.js" %}'></script>
<script type='text/javascript'>
$(document).ready(function(){
var creditScore = $("#creditScore").html();
$("#rangeCS").ionRangeSlider({
type: "double",
min: 0,
max: 1000,
step: 100,
from: 0,
to: creditScore,
from_fixed: true,
to_fixed: true,
grid: true,
grid_snap: true
});
});
</script>
{% endblock %}
如何在 Django 模板中执行 Javascript 和 CSS 并导出为 PDF,而无需将其发送到前端?