Перемещение переменной HTML через представления в скрипт python в Django

При работе в Django я пытаюсь взять переменную из HTML ввода, передать ее в views.py для принятия некоторых решений, затем передать ее из views.py в отдельный скрипт python в моем проекте.

Вот моя форма загрузки в моем HTML файле, этот шаг работает нормально:

            <form method="POST" enctype="multipart/form-data" action="{% url 'upload' %}">
              {% csrf_token %}  
              <input type='file' name='document' accept='.csv' required><br>
              <label for='axis'>Which column is the x-axis?<label>
              <input type='number' name='axis' id='axis' required><br>
              <button type='submit' name='csvreader'>Bar Graph</button>
              <button type='submit' name='line_plot'>Line Graph</button>
              <button type='submit' name='scatter_plot'>Scatter Plot</button>
            </form>

Затем в моем views.py я использую его для проверки правильности значения перед вызовом скрипта python, также работает нормально:

def upload(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST.get, request.FILES)
        file=request.FILES['document']
        df = pd.read_csv(file,header=None)
        data = pd.DataFrame(df)
        length = len(data.columns)
        item = Item()
        item.text = request.POST.get('axis', '')
        item.save()
        request.session['item.text'] = item.text
        if ((int(item.text) < 0)) | ((int(item.text) >= length)):
            HttpResponse("Your axis is not valid")
        if 'csvreader' in request.POST:
            csv = CSV.objects.create(doc=file)
            os.system('python csvreader2.py')
        if 'line_plot' in request.POST:
            csv = CSV.objects.create(doc=file)
            os.system('python line_plot.py')
        if 'scatter_plot' in request.POST:
            csv = CSV.objects.create(doc=file)
            os.system('python scatter_plot.py')
        return render(request, 'uploaded.html')

И наконец, я хочу использовать ее для определения того, какая строка файла csv будет осью x, вот в чем моя проблема. Я понятия не имею, как ссылаться на переменную ни в html-странице, ни в views.py отсюда.

#Asks user which column they would like to use for x axis labels and takes it from the csv file
x_lab = 0
col_1= list(df[int(x_lab)])
col_1.pop(0)
done = 0
x_value = []
x_val = 0
count = 1

Я не использую Flask или Ajax для этого проекта (ограничения по назначению), поэтому я не знаю, как ссылаться на эту переменную в моем скрипте python. Я попытался переделать csvreader.py в собственное представление для удобства перемещения, но потом я продолжал получать ошибку: 'main thread is not in main loop', поэтому я предполагаю, что не могу просто сделать файл python собственным представлением.

Если ваш скрипт на python принимает входные данные и возвращает что-то, даже если только индикатор успеха, превратите ваш код в функцию и импортируйте ее для ваших представлений:

В csvreader2.py

def create_graph(axis)
    ...#do work
    return True

Разместите ваш csvreader2.py в вашем каталоге django на том же уровне, что и views (или там, где это имеет смысл для вас)

В views.py

from .csvreader2 import create_graph

def upload(request):
   ...#do work
   success = create_graph(item.text)
   ...
   #pass  axis to your template as a context values
   if success:
       return render(request, 'uploaded.html', {"axis": item.text})
Вернуться на верх