从django视图获取媒体文件夹的绝对路径

时间:2014-03-22 11:52:46

标签: django django-models django-views

我想提供媒体文件的绝对路径,这样一旦文件上传,我就可以通过媒体文件夹中的绝对路径获取它。 在我的settings.py中,我将MEDIA_ROOT定义为;

MEDIA_ROOT = os.path.join(SITE_ROOT, 'media')

和SITE_ROOT为

SITE_ROOT = os.path.dirname(os.path.realpath(__file__))

在我的模型中,我有一个文件字段,用于定义文件的上传位置

file=models.FileField(upload_to='csvs',blank=True, null=True)

在我的观点中,我试图将绝对文件作为

if request.method=='POST':
        form=UploadForm(request.POST,request.FILES)
        if form.is_valid():
            files=request.FILES['file']
            evidence=request.POST['evidence']
            path_to_tzjmplist_file=default_storage.path(files)
            form.save()

这将绝对路径返回为

"C:\Josh\Desktop\artefacts\artefacts\media\file_name.csv"
问题是它遗漏了最后一个文件夹" csvs" 我希望它回归:

 "C:\Josh\Desktop\artefacts\artefacts\media\csvs\file_name.csv"

我非常感谢你的意见 此致

2 个答案:

答案 0 :(得分:1)

我相信你希望path_to_tzjmplist_file包含文件的磁盘路径。如果这是真的,我认为这样的事情会起作用:

if request.method=='POST':
        form=UploadForm(request.POST,request.FILES)
        if form.is_valid():
            files=request.FILES['file']
            evidence=request.POST['evidence']
            saved_object = form.save()
            path_to_tzjmplist_file = saved_object.file.name

答案 1 :(得分:0)

您应首先保存表单(以便创建对象),然后再访问其属性,然后从实例中获取name的路径:

if request.method=='POST':
        form=UploadForm(request.POST,request.FILES)
        if form.is_valid():
            obj = form.save()  # Saves to the database
            files=request.FILES['file']
            evidence=request.POST['evidence']
            #path_to_tzjmplist_file=default_storage.path(files)
            file_name_with_path = obj.name