簡體   English   中英

Django:如何正確地不在MEDIA_ROOT中加載文件 的FileField?

[英]Django: How to load file not in MEDIA_ROOT correctly | FileField?

在我的Django項目中,我有一個應用程序,我想在其中不加載MEDIA_ROOT中的文件。 我使用了storage屬性來更改位置,但是會引發錯誤。

我使用了下一個代碼,但是在嘗試加載文件時會引發錯誤。 我該如何解決這個問題?

settings.py:

MEDIA_URL = '/media/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_root')

models.py:

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)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM