在Apache上部署Django应用后,媒体文件夹的FileNotFoundError错误

时间:2019-05-02 21:34:58

标签: django apache2

我有一个Django应用,我刚刚将其添加到Apache上已部署的Django网站中。 由于它是由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

settings.py

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

main \ 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”?还是有其他方法可以调用上载的工作簿?

任何帮助/评论将不胜感激。 如果需要其他信息,请发表评论。

1 个答案:

答案 0 :(得分:0)

我的猜测是您应该使用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)