Django: Изменение данных excel и загрузка ppt
В настоящее время я сталкиваюсь с проблемой при развертывании:
Я создал приложение, в котором я ввожу локальный путь к файлу excel, а затем, используя sample_code.py (показанный ниже), создаю отчет в pptx в той же папке, где находится файл excel.
Подведем итоги:
- Я ввожу текст в форму, текст - это мой путь к файлу excel .
- Я нажимаю кнопку, которая запускает мой скрипт sample_code.py
- Создается отчет ppt
Почему это не работает при развертывании на heroku, и как я могу это улучшить?
EDIT: моя идея заключалась в том, чтобы загрузить статический файл в некоторую папку media/excel_files и создать pptx в папке media/pptx_files. проблема в том, что я не уверен, как указать этот путь в моем скрипте sample_code.py. Чем загрузить pptx.
Мои файлы views.py выглядят следующим образом:
from django.shortcuts import render
import sys
from subprocess import run, PIPE
# Create your views here.
def button(request):
return render(request,'home.html')
def external(request):
inp=request.POST.get('param')
out=run([sys.executable,'E:\\project_deployement\\sample_code.py',inp],shell=False,stdout=PIPE)
print(out)
return render(request,'home.html',{'data1':out.stdout.decode('utf-8')})
urls.py
from django.urls import path
from . import views
urlpatterns = [
path('', views.button),
path('external/', views.external),
]
а файл home.html выглядит следующим образом
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>Work Script</title>
</head>
<body>
<form action="/external/" method="post">
{% csrf_token %}
Input Path:
<input type="text" name="param" required><br><br>
{{ data_external }}
<input type="submit" value="Generate Toplines">
</form>
</body>
</html>
последним важным шагом является sample_code.py
from pptx import Presentation
from pptx.chart.data import CategoryChartData
from pptx.enum.chart import XL_CHART_TYPE
from pptx.util import Inches
import pandas as pd
import sys
path = "%s" % (sys.argv[1])
pr1 = Presentation()
slide2_reg = pr1.slide_layouts[0]
slide2 = pr1.slides.add_slide(slide2_reg)
title2 = slide2.shapes.title
title2.text = "slide 1"
slide1_reg = pr1.slide_layouts[5]
slide1 = pr1.slides.add_slide(slide1_reg)
title1 = slide1.shapes.title
title1.text = "slide 2"
df = pd.read_excel (path+'sample_data.xlsx')
df = df.groupby('Product')['variable_x'].mean()
chart_data = CategoryChartData()
chart_data.categories = list(df.index)[0], list(df.index)[1] #gets string categories
chart_data.add_series('variable_x', (df.iat[0], df.iat[1])) #gets integer values
x, y, cx, cy = Inches(1), Inches(1), Inches(2), Inches(2.5)
slide1.shapes.add_chart(
XL_CHART_TYPE.COLUMN_CLUSTERED, x, y, cx, cy, chart_data
)
pr1.save(path+'presentation.pptx')