django - 在 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'?或者有没有其他方法可以调用上传的工作簿?
任何形式的帮助/评论将不胜感激。如果需要更多信息,请发表评论。
解决方案
我的猜测是您应该使用 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)
推荐阅读
- android - 运行应用程序时出现颤振闪屏错误
- r - 如何将一个观察分解为几个子观察?
- windows - 如何在后台运行windows powershell脚本
- flutter - Flutter Web 应用程序无法在移动浏览器上运行。如果在移动浏览器上运行颤振代码,如何调试错误?
- javascript - 如何在不呈现子项的组件中呈现子项?
- scala - 为什么我从 Spark 编写的任何文件都不是人类可读的?
- .net - MassTransit.QuartzIntegration.ScheduledMessageJob:无法实例化没有空构造函数的类型(参数'ScheduledMessageJob')'
- spring-boot - Spring Boot @PostMapping is there a way to detect null fields in a incoming request body?
- python - 不传递请求参数如何在 django 中获取登录用户名
- linux - Yocto:使用 Bitbake 构建图像时出错