Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/34.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Django模板中执行Javascript和css_Javascript_Css_Django - Fatal编程技术网

在Django模板中执行Javascript和css

在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

我在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
发送到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之类的工具来运行站点并生成内容。您可以尝试在内部呈现页面。更多信息:我正在考虑也许你可以尝试在内部呈现页面。更多信息:我正在考虑