Javascript 在Django中使用xhtml2pdf生成PDF时出现问题

Javascript 在Django中使用xhtml2pdf生成PDF时出现问题,javascript,python,django,Javascript,Python,Django,我尝试在Django中使用xhtml2pdf生成一个PDF,它基于我将在request.POST中获取的数据。 我曾经使用HTML表单和submit按钮发送数据,将数据提交到视图。一切都很好,我把生成的PDF附加到浏览器上。 但问题是,我尝试过使用AJAX,似乎一切正常,我得到了渲染的PDF。但PDF没有附上。我认为,当我使用普通HTML表单发送邮件时,幕后会发生一些事情,而使用Ajax则不会发生这种情况 def create_pdf(request): data = json.load

我尝试在Django中使用xhtml2pdf生成一个PDF,它基于我将在request.POST中获取的数据。 我曾经使用HTML表单和submit按钮发送数据,将数据提交到视图。一切都很好,我把生成的PDF附加到浏览器上。 但问题是,我尝试过使用AJAX,似乎一切正常,我得到了渲染的PDF。但PDF没有附上。我认为,当我使用普通HTML表单发送邮件时,幕后会发生一些事情,而使用Ajax则不会发生这种情况

def create_pdf(request):
    data = json.loads(request.POST["courses"])
    context = {
        "courses": data
    }
    template = "teachers/course_template.html"
    pdf = render_to_pdf(template, context)
    if pdf:
        response = HttpResponse(pdf, content_type="application/pdf")
        filename = "plan.pdf"
        content = "attachment; filename=%s" % filename
        download = request.GET.get("download")
        if download:
            content = "attachment; filename=%s" % filename
            response["Content-Disposition"] = content
            return response
    return HttpResponse("Not found.")


def render_to_pdf(template_src, context_dict={}):
    template = get_template(template_src)
    html = template.render(context_dict)
    result = BytesIO()
    pdf = pisa.pisaDocument(
        BytesIO(html.encode("UTF-8")), result, encoding="UTF-8")

    return HttpResponse(result.getvalue(), content_type="application/pdf")
我通过以下方式发送数据:

$(".btnCreatePlan").click(function (e) {
    e.preventDefault()
    // Send courses to the view
    var CSRFToken = $("input[name=csrfmiddlewaretoken]").val();
    
    var parameters = {
        "workouts": JSON.stringify(workouts),
        "csrfmiddlewaretoken": CSRFToken
    };

    $.ajax({
        url: "http://localhost:8000/teachers/requests/create/pdf/",
        method: "post",
        data: parameters,
        
        success: function(res) {
            window.location.href=res.redirect_url;
            console.log(res)
        },
        
        error: function(er){
        console.log(er);
        }
        });
});