我在我的Django應用程序中通過Weasyprint將HTML導出爲PDF。我注意到,如果我將模板html發送到前端,並將該html返回到後端以將其導出爲pdf,則它會完美打印。但是,如果我直接發送模板html到Weasyprint,它會弄亂一切!沒有CSS,沒有JavaScript。在Django模板中執行Javascript和css
這是我如何使用模板來生成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
到Weayprint而沒有發送到前端時,設計和着色消失了!
在我的模板,我甚至已經包括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模板和導出爲PDF執行JavaScript和CSS,而無需將其發送到前端?
也許你可以嘗試在內部呈現頁面。一些更多的信息:http://stackoverflow.com/questions/126131/python-library-for-rendering-html-and-javascript#126250 – Marcs
即時考慮它 –