Невозможно принудительно загрузить файл в Django HttpResponse (HTML / PDF) - PullRequest
0 голосов
/ 19 июня 2020

Я пытаюсь вывести HTML или файлы PDF для загрузки. Я написал несколько строк кода для создания файла html & PDF из шаблона и его загрузки.

  1. Однако мой код работает только для Chrome браузера . Когда я пытаюсь загрузить его из другого браузера (например, DuckDuck Go), я загружаю свою текущую страницу (например, roll. html) вместо файла (т.е. файла, отображаемого из html_output_template. html), который я хочу экспорт.

Вот код, который я пробую: views.py

def generate_html(request, res):
    cdict = {'res':res, 'date':datetime.date.today()}
    if request.method == 'POST':
        inv_form = InvoiceInfoForm(data= request.POST)
        if inv_form.is_valid():
            inv_data  = inv_form.cleaned_data
            cdict = {'res':res, 'inv_data':inv_data, 'date':datetime.datetime.today().strftime("%d %h %Y")}
    template = get_template('app_name/html_output_template.html')
    html  = template.render(cdict)
    response = HttpResponse(html, content_type='application/force-download')
    filename = "Inv_%s.html" %(datetime.datetime.today().strftime("%d_%h_%y_%H_%M_%S"))
    content = "attachment; filename= %s" %(filename)
    response['Content-Disposition'] = content
    return response


def MyView(request):
    """Some 
    Calculations 
    Here"""

    if 'download_pdf' in request.POST:
        if inv_form.is_valid():
            return generate_pdf(request, res)
    elif 'download_html' in request.POST:
        if inv_form.is_valid():
            return generate_html(request, res)

    return render(request,'app_name/roll.html',context=cdict)

Пример html шаблона: html_output_template. html

{% load staticfiles %}
<!-- Few Lines here -->
       <tr>
          <td style="text-align:left">1</td>
          <td style="text-align:left">{{inv_data.description}}</td>
          <td style="text-align:right">{{res.rate_per_gram}} {{res.rate_kilo_gram}}</td>
          <td style="text-align:right">{{res.wgt_of_goods}}</td>
          <td style="text-align:right">{{res.total_amount}}</td>
        </tr>

Я считаю, что есть проблема с моим HttpResponse, который автоматически исправляется в Chrome, а не в других браузерах. Я не могу решить эту проблему, помогите пожалуйста

...