Как внедрить js в django для выполнения 3 функций?

Я нашел этот вопрос, который мне подходит, но я не знаю js. Я хочу запустить 3 функции, как вы видите в моем views.py, но я не могу сделать это, потому что я использую из форм один документ, который загружается для запуска 3 функций. Можете ли вы помочь мне внедрить этот js в мой django сайт. Пожалуйста, дайте точный ответ. Заранее спасибо!

Это forms.py

class DocumentForm(forms.Form):
    docfile = forms.FileField(label='Select a file')

Это views.py

def save_exls(request):
    if request.method == 'POST':
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            newdoc = Document(docfile=request.FILES['docfile'])
            newdoc.save()
            return redirect('html_exls')
    else:
        form = DocumentForm()
    documents = Document.objects.all()
    context = {'documents': documents, 'form': form,}
    return render(request, 'list.html', context)


def pandas_exls(request):
    if request.method == "POST":
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            output = io.BytesIO()
            newdoc = request.FILES['docfile']
            dfs = pd.read_excel(newdoc, sheet_name=None, index_col=[0])
            writer = pd.ExcelWriter(output)
            for name, df in dfs.items():
                #pandas stuff
                done.to_excel(writer, sheet_name=name)
            output.seek(0)
            response = HttpResponse(
                output, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=%s' % filename
            return response
    else:
        form = DocumentForm()
    return render(request, 'list.html', {'form': form})


def html_exls(request):
    if request.method == "POST":
        form = DocumentForm(request.POST, request.FILES)
        if form.is_valid():
            output = io.BytesIO()
            newdoc = request.FILES['docfile']
            dfs = pd.read_excel(newdoc, sheet_name=None, index_col=[0])
            writer = pd.ExcelWriter(output)
            for name, df in dfs.items():
                #pandas stuff for html 
                done.to_excel(writer, sheet_name=name)

            html = done.to_html()
            print(html)
            output.seek(0)
            response = HttpResponse(
                output, content_type='application/vnd.openxmlformats-officedocument.spreadsheetml.sheet')
            response['Content-Disposition'] = 'attachment; filename=%s' % filename
            return response
    else:
        form = DocumentForm()
    return render(request, 'list.html', {'form': form})

Это html-файл, list.html

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Django site</title>
    </head>

    <body>

        <!-- Upload form. Note enctype attribute! -->
        <form action="{% url "pandas_exls" %}" method="post" enctype="multipart/form-data">
            {% csrf_token %}
            <p>{{ form.non_field_errors }}</p>

            <p>{{ form.docfile.label_tag }} {{ form.docfile.help_text }}</p>

            <p>
                {{ form.docfile.errors }}
                {{ form.docfile }}
            </p>

            <p><input type="submit" value="Upload"/></p>
        </form>
        <br/>
            {{table|safe}}
        

    </body>
</html>

forms.py

from django import forms    
class DocumentForm(forms.Form):
    docfile = forms.FileField(label='Select a file')

views.py

from django.http import HttpResponseRedirect
from django.shortcuts import render
from .forms import UploadFileForm
from calculation import handle_uploaded_file


def upload_file(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            html_to_show = handle_uploaded_file(request.FILES['file'])
            return HttpResponse(html_to_show)
    else:
        form = DocumentForm()
    return render(request, 'upload.html', {'form': form})

calculation.py

def do_calculation(fname):
    df = pd.read_excel(fname)
    #Perform df operations here
    return df.to_html()

def handle_uploaded_file(f):
    fname = 'some/file/name.xlsx'
    with open(fname, 'wb+') as destination:
        for chunk in f.chunks():
            destination.write(chunk)
    return do_calculation(fname)

Если чего-то не хватает, пожалуйста, прокомментируйте это ниже. Я посмотрю еще раз.

Вернуться на верх