Python Django:如何正确加载不在媒体|根目录|文件字段中的文件?

Python Django:如何正确加载不在媒体|根目录|文件字段中的文件?,python,django,python-2.7,django-1.11,Python,Django,Python 2.7,Django 1.11,在我的Django项目中,我有一个应用程序,我想在其中加载不在MEDIA_ROOT中的文件。我使用storage属性来更改位置,但它会引发错误 我使用了next代码,但在尝试加载文件时出错。我如何解决这个问题 设置。py: MEDIA_URL = '/media/' MEDIA_ROOT = os.path.join(BASE_DIR, 'media_root') from django.core.files.storage import FileSystemStorage from os i

在我的Django项目中,我有一个应用程序,我想在其中加载不在MEDIA_ROOT中的文件。我使用
storage
属性来更改位置,但它会引发错误

我使用了next代码,但在尝试加载文件时出错。我如何解决这个问题

设置。py:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_root')
from django.core.files.storage import FileSystemStorage
from os import environ

PRODUCT_STORAGE = FileSystemStorage(location=environ.get('PRODUCT_STORAGE_PATH'))

def product_file_upload_path(instance, filename):
    if instance.category=="1":
        path = '/category_1/' + '/%s' % filename
        return path
    elif instance.category=="2":
        path = '/category_2/' + '%s' % filename
        return path
    else:
        path = '%s' % filename
        return path

class Product(models.Model):
    file = models.FileField(
        max_length=255,
        blank=True,
        null=True,
        validators=[validate_file_extension],
        storage=PRODUCT_STORAGE,
        upload_to=product_file_upload_path,

    )
The joined path (/category_1/test.pdf) is located outside of the base path component (/other_folder)
型号。py:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_root')
from django.core.files.storage import FileSystemStorage
from os import environ

PRODUCT_STORAGE = FileSystemStorage(location=environ.get('PRODUCT_STORAGE_PATH'))

def product_file_upload_path(instance, filename):
    if instance.category=="1":
        path = '/category_1/' + '/%s' % filename
        return path
    elif instance.category=="2":
        path = '/category_2/' + '%s' % filename
        return path
    else:
        path = '%s' % filename
        return path

class Product(models.Model):
    file = models.FileField(
        max_length=255,
        blank=True,
        null=True,
        validators=[validate_file_extension],
        storage=PRODUCT_STORAGE,
        upload_to=product_file_upload_path,

    )
The joined path (/category_1/test.pdf) is located outside of the base path component (/other_folder)
错误:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_root')
from django.core.files.storage import FileSystemStorage
from os import environ

PRODUCT_STORAGE = FileSystemStorage(location=environ.get('PRODUCT_STORAGE_PATH'))

def product_file_upload_path(instance, filename):
    if instance.category=="1":
        path = '/category_1/' + '/%s' % filename
        return path
    elif instance.category=="2":
        path = '/category_2/' + '%s' % filename
        return path
    else:
        path = '%s' % filename
        return path

class Product(models.Model):
    file = models.FileField(
        max_length=255,
        blank=True,
        null=True,
        validators=[validate_file_extension],
        storage=PRODUCT_STORAGE,
        upload_to=product_file_upload_path,

    )
The joined path (/category_1/test.pdf) is located outside of the base path component (/other_folder)

删除前导斜杠并使用
'category_1/'
'category_2/'

您还需要从
'/%s'
中删除斜杠,否则您将在路径中得到
/
。您可以使用
os.path.join()
来防止这样的错误

import os
path = os.path.join('category1', filename)

我已经发现问题了。正如你所说,问题出在斜杠上。不管怎样,你能把你的答案贴在帖子上吗(不像评论),我会记下来的,兄弟;)