@pro100ckat

Как поймать файл из поля input файл и поместить в переменную в функцию Django?

Имеется такая страница. Нужно чтобы по нажатию кнопки выполнить, в функцие show_data создавалась переменная содержащая файл из поля input file. Загружать файл на сервер Django не нужно. Такой функционал уже реализован. Суть в том чтобы на этой странице получить именно файл из input в переменную. Надеюсь понятно объяснил. Если немного подробнее: я проверяю excel файл с другим excel файлом. Функционал всех проверок реализован. Но второй файл проверки пока что тупо подгружается с рабочего стола, а другой файл берется уже из БД. Для примера в конец вставил функцию проверки "Графика"

5ca76bdc76b7c001270287.png

{% extends "base.html" %}
{% block title %}Проверка плана{% endblock title %}


{% block content %}

    <div class="container" style="margin-top: 80px"  >
        <form enctype="multipart/form-data" action="" method="POST">
         {% csrf_token %}
            <br style="margin-top: 5px">
                <h4>Выберите шаблон .xlsx:</h4>
                <input style="" type="file" name="shablon" value="shablon" id="shablon">
            <br>
                <h4>Выберите параметры проверки:</h4>

                <div>
                  <input type="checkbox" id="titul" name="titul" align="left">
                  <label for="scales">Титульный лист</label>
                </div>
                <div>
                  <input type="checkbox" id="grafik" name="grafik" align="left">
                  <label for="horns">График</label>
                </div>
                <div>
                  <input type="checkbox" id="plan" name="plan">
                  <label for="horns">План</label>
                </div>
                <div>
                  <input type="checkbox" id="plan_svod" name="plan_svod">
                  <label for="horns">План/Свод</label>
                </div>
                <div>
                  <input type="checkbox" id="comp" name="comp">
                  <label for="horns">Компетенции</label>
                </div>
                 <div>
                  <input type="checkbox" id="All" name="all">
                  <label for="horns">Весь план</label>
                </div>
                 <div>
                  <input type="checkbox" id="edit" name="edit">
                  <label for="horns">Заменить ошибочные данные</label>
                </div>
                <input type="submit" name="go" value="Выполнить" class="btn btn-primary"><br></br>
                <a href="{% url "show_files" %}" class="btn btn-secondary"> На главную </a><br>
        </form>
    </div>
{% endblock content %}


View
def show_data(req, file_id):
    file = Files.objects.get(file_id=file_id)
    if req.method == "GET":
        return render(req, "show_data.html", locals())
    if req.method == "POST":
        if 'titul' in req.POST:
            file = Files.objects.get(file_id=file_id)
            check_titul(req, file)
            file = Files.objects.get(file_id=file_id)
        if 'all' in req.POST:
            check_all(req, file)
            file = Files.objects.get(file_id=file_id)
        if 'grafik' in req.POST:
            file = Files.objects.get(file_id=file_id)
            check_grafik(req, file)
            file = Files.objects.get(file_id=file_id)
        if 'plan' in req.POST:
            file = Files.objects.get(file_id=file_id)
            check_plan(req, file)
            file = Files.objects.get(file_id=file_id)
        if 'plan_svod' in req.POST:
            file = Files.objects.get(file_id=file_id)
            check_plan_svod(req, file)
            file = Files.objects.get(file_id=file_id)
        if 'comp' in req.POST:
            file = Files.objects.get(file_id=file_id)
            check_compititions(req, file)
            file = Files.objects.get(file_id=file_id)
        return render(req, "show_data.html", locals())
    else:
        return render(req, "show_data.html", locals())


def check_grafik(req,file):
    wb = open_wb(file)
    sheet_wb = wb['График']
    shablon = openpyxl.load_workbook('C:/Users/user/Desktop/check.xlsx')
    sheet_shablon = shablon['График']
    name_file = give_name_file(file)
    row_count = sheet_shablon.max_row
    a = find_index(a='I', sheet = sheet_shablon, count=row_count) - 2
    b = find_index(a='IV', sheet = sheet_shablon, count=row_count) + 6
    list = give_list(2, 54, sheet = sheet_shablon, sheet2=sheet_wb, m=a, n=b)
    wb.save('media/' + 'media/' + name_file + '.xlsx')
    wb.close()
    return locals()

shablon = openpyxl.load_workbook('C:/Users/user/Desktop/check.xlsx') Здесь как мы видим файл берется с рабочего стола. Хотелось бы сделать чтобы файл брался с поля input file
  • Вопрос задан
  • 347 просмотров
Решения вопроса 1
@pro100ckat Автор вопроса
def check_grafik(req,file,shab):
    wb = open_wb(file)
    sheet_wb = wb['График']
    shablon = load_workbook(shab)
    sheet_shablon = shablon['График']
    name_file = give_name_file(file)
    row_count = sheet_shablon.max_row
    a = find_index(a='I', sheet = sheet_shablon, count=row_count) - 2
    b = find_index(a='IV', sheet = sheet_shablon, count=row_count) + 6
    list = give_list(2, 54, sheet = sheet_shablon, sheet2=sheet_wb, m=a, n=b)
    wb.save('media/' + 'media/' + name_file + '.xlsx')
    wb.close()
    return locals()


if 'grafik' in req.POST:
            file = Files.objects.get(file_id=file_id)
            check_grafik(req, file,shab=req.FILES['shablon'])
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
sergey-gornostaev
@sergey-gornostaev Куратор тега Django
Седой и строгий
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы