如何在Django

时间:2019-04-30 09:42:34

标签: python django file-upload parameter-passing

在我的Django“源”项目中,我有“公告”应用。 我有一个视图“ model_form_upload”,在其中上传该文件时,会得到其中的上传文件名(“ csvFilename”)。

views.py

from bulletins.forms import ErnageForm
from bulletins.models import ErnageModel
from bulletins.pretreatment import pretreatment

def model_form_upload(request):
    if request.method == 'POST':
        form = ErnageForm(request.POST, request.FILES)
        if form.is_valid():
            form.save()
            for filename, file in request.FILES.items():
                csvFilename = file.name
            resultPretreatment = pretreatment()
            print(resultPretreatment)
            return redirect('proceed_FT')
        else:
            return redirect('upload_fail')
    else:
        form = ErnageForm()
    return render(request, 'bulletins/upload_csv.html', {'form': form})

除此之外,我还有一个python脚本“ preprocessing.py”,可对csv文件进行一堆pandas-dataframe转换。

preprocessing.py

def pretreatment(csvFileToTreat="..."
#... all the transformations with pandas dataframes...
df.to_csv(txtExportFilePath, index=False, header=None, sep='\t')

models.py

class ErnageModel(models.Model):
    csv = models.FileField(upload_to="METEO ERNAGE/{0}/{1}".format(yearToTreat,monthToTreat))

我的csvFilename将始终是以下类型的字符串:“ Ernageyyyymm.csv”。

我的问题是:我如何从views.model_form_upload函数中收集我的csvFilename变量,以便在预处理python脚本变量“ csvFileToTreat”和“ txtExportFilePath”中使用其日期信息。

这两个类型的类型为“路径/Ernage{0}{1}.format(yearToTreat,monthToTreat)。

由于我每个月都必须使用它,因此我希望将文件上传到media/METEO ERNAGE/{0}/{1}".format(yearNumber,monthNumber)中,就像您在FileField upload_to中看到的那样,然后此目录中发生的一切。因此,预处理会对上载的文件收费,然后再将其导出。

我希望所有这些都尽可能清楚,谢谢您的帮助。

1 个答案:

答案 0 :(得分:0)

在这样的会话中存储csvFilename名称:

request.session['file']=csvFilename 

,您可以在任何需要的地方使用此会话。

 csvFilename =request.session['file']