Django: шаблон HTML не может быть преобразован в PDF - PullRequest
0 голосов
/ 30 августа 2018

Я довольно новичок в Django, а также в JS / Jquery.

Я пытаюсь создать PDF-представление моего HTML-шаблона, нажав кнопку «Подтвердить». Я также написал сценарий js / jquery в том же шаблоне для создания PDF, и вместо этого я перенаправлен на мою домашнюю страницу; так же, как я определил это сделать в соответствующем методе представления. Теперь мне интересно, почему он не запускает скрипт js / jquery и продолжает ссылаться на мой метод view, а также на то, что я могу сделать, чтобы он прошел через скрипт и преобразовал страницу в PDF и загрузил ее для пользователя после нажатия Кнопка «Подтвердить».

Большое спасибо за ваши умные комментарии!

Мой шаблон

<!DOCTYPE html>
{% load staticfiles %}
<html>
<head>
<meta charset="utf-8" />
<link rel="stylesheet" href="{% static 'css/quote_letter_est.css' %}">
<script src="https://code.jquery.com/jquery-1.12.3.min.js"></script>
<script 
src="https://cdnjs.cloudflare.com/ajax/libs/jspdf/0.9.0rc1/jspdf.min.js"> 
</script>

<title>Estimate Quote Letter</title>
<script>
    var doc = new jsPDF();
    var specialElementHandlers = {
        '#editor': function (element, renderer) {
            return true;
        }
    };

    $('#Approve').click(function () {
        doc.fromHTML($('#content').html(), 15, 15, {
            'width': 170,
                'elementHandlers': specialElementHandlers
        });
        doc.save('sample-file.pdf');
    });
</script>
</head>
<div id="content">
<body  bgcolor="#ffffff" border="1">
    <form action="http://{{host}}:{{port}}/label/approve001" method="Get">
    {%csrf_token%}
        {% block content %}
            {% if cust_data %}
              {% for row in cust_data %}
                  <table id = "print-friendly" class="print-friendly" style="width:80%; cellspacing:0;">
                        <td colspan="8" align="left" valign="top" >{{ row.contact_fname }}&nbsp;{{ row.contact_lname }}<br>We trust that the following estimate meets with your approval and we look forward to working with you.<br><br>
                        </td>
                        <th colspan="2" align="left" style="width:300px; height:25px; font-size:14px;">
                        <p>TO: <br>{{ row.customer }} <br>{{row.add_line1}}, 
                           {{row.add_line2}} <br>{{ row.city}}, {{ 
                            row.province}}{{ row.postal_code}} 
                            <br>ATTN:&nbsp;&nbsp;{{ row.contact_lname }} 
                            <br>Phone:&nbsp;&nbsp;{{ row.phone }} 
                            <br>Email:&nbsp;&nbsp;{{ row.email }}</th> </p> 

                        <th></th><th align="left" style="width:300px; 
                        height:25px; font-size:14px;">QUOTATION#:&nbsp;&nbsp; 
                        {{ quotation_number }}<br>Date:&nbsp;&nbsp;{{ 
                         current_date}}<br><br>Sales Person:&nbsp;&nbsp;{{ 
                         row.sales_person }}<br>CSR:&nbsp;&nbsp;{{row.csr}} 
                         <br>Estimator:&nbsp;&nbsp;{{estimater}}
                       </th>
                       <input type="hidden"  name="Description" id="Description"     value={{quote_description}}>
                       <input type="hidden"  name="sales_person" id="sales_person"     value={{sales_person}}>
                       <input type="hidden"  name="csr_name" id="csr_name"     value={{csr_name}}>
                       <input type="hidden"  name="estimater" id="estimater"     value={{estimater}}>
                       <input type="hidden"  name="contact_lname" id="contact_lname"     value={{row.contact_lname}}>
                       <input type="hidden"  name="contact_fname" id="contact_fname"     value={{row.contact_fname}}>
                       <input type="hidden"  id="quotation_id" name="quotation_id" value={{ quotation_number }}>
                       <input type="hidden" name="deal_id" value={{ deal_id }}>
              </table>
              <button class="myButton" id="Approve" type="submit" name="approve001" formaction="approve001/" value=approve001>Approve</button>

              <input type="button" class ="myButton" name="Revise_All" 
               onclick="window.location.href='http://{{host}}: 
               {port}}/label/generate_quotation_letter001/letter_quotation/? 
               id='+ quotation_id.value + '&deal_id=' + deal_id.value "  
               value="Revise" /> 
    </div>
</body>
</html>

и этот метод my view (обратите внимание, что значения request.GET извлекаются из базы данных и обрабатываются в другом методе, и там нет проблем).

class approve(APIView):
    def get(self, request):
        print ("Step 1 121get")
        part = request.GET['quotation_id']
        try:
            req_id = request.GET['quotation_id']
        except:
            req_id = ""
        try:
           verb = request.GET['approve001']
        except:
            verb = ""

        if verb == "decline001": #""decline":
            print ("decline data............")
        try:
            self.UpdateStatusRequest(req_id, "Request-Declined")
        except:
            quotation_id = ""

    elif verb == "approve001": #""approved":
        print ("approve data............")
        try:
            self.UpdateStatusRequest(req_id, "Request-Approved")
        except:
            quotation_id = ""
    return redirect('/')

def UpdateStatusRequest(self, req_id, status_state):
    print("pppppppppp", req_id, status_state)
    query = "update label_newquote set status=" + "'" + status_state + "' " + " WHERE id = " + str(req_id) + ";"
    print (query)
    with connection.cursor() as cursor:
        cursor.execute(query)

def post(self, request):
    print("Step 1 post")
    try:
        submit = request.POST.get('submit')
    except:
        submit = ""
    try:
        decline = request.POST.get('decline')
    except:
        decline = ""
    print(submit)
    print(decline)

    return redirect('generate_quotation_letter001/letter_quotation/')

и на всякий случай, это мой URL:

url(r'^generate_quotation_letter/perform_generate_quotation_letter/letter_quotation/LetterTwoQuotation/approve001/$', views_pdf.approve.as_view(), name="approve"),

1 Ответ

0 голосов
/ 30 августа 2018

Оберните ваши js в функцию и верните функцию при отправке формы.

Сделай что-нибудь подобное.

<script>
function pdfdownload(){
var doc = new jsPDF();
    var specialElementHandlers = {
        '#editor': function (element, renderer) {
            return true;
        }
    };

    $('#Approve').click(function () {
        doc.fromHTML($('#content').html(), 15, 15, {
            'width': 170,
                'elementHandlers': specialElementHandlers
        });
        doc.save('sample-file.pdf');
    });
return false;
}
</script>

и для формы

<form action="your_url" onsubmit="return pdfdownload()"> // your form

Без этого вызова кнопка отправки отправляет любую форму в URL-адресе, указанном в действии формы, без выполнения вашего js.

Обратите внимание, что это не отправляет вашу форму после выполнения вашего js.Если вы хотите, чтобы форма отправлялась по URL-адресу, указанному в действии после выполнения js, просто измените «return false» на «return true» в вашей функции.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...