在Django模板中执行Javascript和css
我在Django应用程序中通过Weasyprint将HTML导出为PDF。我注意到,如果我将模板html发送到前端,并将该html返回到后端以将其导出为pdf,它将完美地打印出来。但如果我直接将模板html发送到Weasyprint,它会把一切都搞糟!没有css,没有javascript 以下是我使用模板生成html的方式:在Django模板中执行Javascript和css,javascript,css,django,Javascript,Css,Django,我在Django应用程序中通过Weasyprint将HTML导出为PDF。我注意到,如果我将模板html发送到前端,并将该html返回到后端以将其导出为pdf,它将完美地打印出来。但如果我直接将模板html发送到Weasyprint,它会把一切都搞糟!没有css,没有javascript 以下是我使用模板生成html的方式: template = loader.get_template('Reporting/reportTemplate.html') context = { "repor
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 %}
{%load static%}
{%block content%}
$(文档).ready(函数(){
var creditScore=$(“#creditScore”).html();
$(“#rangeCS”).IonRangeSlaider({
类型:“双”,
分:0,,
最高:1000,
步骤:100,
起:0,,
致:creditScore,
从(u fixed):对,,
对你说:是的,
网格:是的,
网格捕捉:真
});
});
{%endblock%}
如何在Django模板中执行Javascript和CSS并导出为PDF,而不必将其发送到前端?您的意思是在作为Weasyprint源代码呈现的模板中包含JS吗?因为使用这种方式的JS只在客户端(如浏览器)上运行,而Weasyprint不会运行它,所以它不能。您必须向Weasyprint提供最终文档(HTML)
如果您的PDF中存在CSS问题,那么您可能正在为Weasyprint使用不受支持的CSS功能。您的意思是在作为Weasyprint源代码呈现的模板中包含JS吗?因为使用这种方式的JS只在客户端(如浏览器)上运行,而Weasyprint不会运行它,所以它不能。您必须向Weasyprint提供最终文档(HTML)
如果您的PDF中存在CSS问题,那么您可能正在为Weasyprint使用不受支持的CSS功能。正如mille_a所说,您无法将javascript代码执行到PDF中 因此,要解决您的问题,您需要在您的视图中执行以下操作:
# do some python stuff to get somes datas
datas = ...
# assign it into your html
htmlContent = my_html_template.render(datas)
# call the pdf generation
HTML(string=htmlContent).write_pdf(target=response)
有关更多详细信息,请参见此示例:
希望有帮助。就像mille_a说的,你不能将javascript代码执行到pdf中 因此,要解决您的问题,您需要在您的视图中执行以下操作:
# do some python stuff to get somes datas
datas = ...
# assign it into your html
htmlContent = my_html_template.render(datas)
# call the pdf generation
HTML(string=htmlContent).write_pdf(target=response)
有关更多详细信息,请参见此示例:
希望有帮助。我在模板中使用RangeSloider来显示某种数据。在发送到weasyprint之前,有没有一种方法可以执行Javascript,而不必将其发送到浏览器?我认为您需要一种方法来执行运行django应用程序的Javascript引擎。您可以使用Selenium+Phantom webdriver之类的工具来运行站点并生成内容我在模板中使用RangeSloider来显示某种数据。在发送到weasyprint之前,有没有一种方法可以执行Javascript,而不必将其发送到浏览器?我认为您需要一种方法来执行运行django应用程序的Javascript引擎。您可以使用Selenium+Phantom webdriver之类的工具来运行站点并生成内容。您可以尝试在内部呈现页面。更多信息:我正在考虑也许你可以尝试在内部呈现页面。更多信息:我正在考虑