首页 > 解决方案 > 在 Apache 上部署 Django 应用程序后媒体文件夹的 FileNotFoundError

问题描述

我有一个 Django 应用程序,我刚刚添加到 Apache 上已经部署的 Django web 中。因为它是由 Apache 运行的,所以媒体文件夹的路径似乎不同。

我的应用程序允许用户上传一个 excel 文件,然后更改数字并保存为 csv 文件。

(仅显示相关文件夹/代码片段)当前目录

converts\
    _init_.py
    apps.py
    forms.py
    models.py
    converter.py
    urls.py
    views.py
main\
    settings.py
    urls.py
    wsgi.py
meida\
    excels\
        example.xlsx
    csvs\
        example.csv
static\
manage.py

设置.py

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
MEDIA_ROOT = os.path.join(BASE_DIR, 'media')
MEDIA_URL = '/media/'

主\urls.py

urlpatterns = [
    path('', RedirectView.as_view(url='/converts/')),
    path('converts/', include('converts.urls')),
] + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

导致问题的部分在 converts/converter.py 中如下:

def convertExcel(name):
    path = 'media/excels/'
    key = path + name
    wb = load_workbook(key)

最初在开发中,视图中的一个函数调用 convertExcel(example.xlsx),工作簿通过 media/excels/example.xlsx 找到正确的文件以使用加载的工作簿。但在生产服务器中,它给出了

FileNotFoundError: [Errno 2] No such file or directory: 'media/excels/example.xlsx'

我的问题是:我是否必须从 apache2.conf 的位置回溯才能找到路径?或者有没有办法设置我的 django 项目的路径,这样我就可以在我的 convertExcel() 中将路径设置为'media/excels'?或者有没有其他方法可以调用上传的工作簿?

任何形式的帮助/评论将不胜感激。如果需要更多信息,请发表评论。

标签: djangoapache2

解决方案


我的猜测是您应该使用 MEDIA_ROOT 变量,因为它指向上传的文件。所以你会有

def convertExcel(name):
    from django.conf import settings
    path = os.path.join(settings.MEDIA_ROOT, 'excels')
    key = os.path.join(path, name)
    wb = load_workbook(key)

推荐阅读