我有一个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”?还是有其他方法可以调用上载的工作簿?
任何帮助/评论将不胜感激。 如果需要其他信息,请发表评论。
答案 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)