gpt4 book ai didi

python - Django:media_root 的相对路径不在项目目录中

转载 作者:行者123 更新时间:2023-12-01 03:06:32 24 4
gpt4 key购买 nike

我有一个 Django 应用程序,它显示由另一个监控应用程序创建的监控视频缩略图(作为各自视频的超链接),其方式比监控应用程序本地显示它们更适合我。

基本上,我有一个脚本,每半小时将文件从监视应用程序存储位置移动到生产服务器将它们提供给 Django 应用程序的位置。

假设这些文件已移动到服务器上的以下位置:

/media/djangoAppMedia/

到目前为止,对于开发,我已将 MEDIA_ROOT 硬编码到此路径:

MEDIA_ROOT = '/media/djangoAppMedia/'

我想将其更改为相对路径,但我能找到的所有示例始终引用主 Django 应用程序项目中的媒体根。

例如:MEDIA_ROOT = os.path.join(ENV_PATH, 'media/')

如何将媒体根目录设置为不在 Django 目录内的相对路径?

或者,我应该将文件移动到项目中的媒体目录中吗?或者,甚至使用静态这些?

对我来说有一些灰色区域,因为这些文件不是“用户提交的”,就像媒体根目录的常见用例一样,但它们似乎也不适合正常的 django 静态用例。

最佳答案

问题就变成了,相对于什么?生产网络服务器对当前目录的看法可能会令人惊讶。

如果您的意思是相对于源文件所在的位置,那么:

DIRNAME = os.path.dirname(__file__)
MEDIA_ROOT = os.path.join(DIRNAME, 'some', 'path', 'under', 'this', 'folder')

如果您的意思是完全独立于您的项目的路径,那么您将需要某种方法来在开发和产品上找到它。环境变量是实现此目的的一种方法:

MEDIA_ROOT = os.environ['MY_VIDEO_FILES']

您必须确保环境变量是由启动运行时环境的任何内容设置的。

您当然可以在 settings.py 中使用 if 语句:

if DEBUG:
MEDIA_ROOT = os.path.abspath('../../some/relative/path')
else:
MEDIA_ROOT = '/some/absolute/path/on/prod/server'

这工作正常,而且最简单,特别是如果您是唯一的开发人员。

更新: Apache 等

启用 mod_env Apache 模块后,可以定义环境变量(在虚拟主机中):

SetEnv MEDIA_ROOT /absolute/path/to/media/root

这些是 apache 环境变量,因此您必须更改 wsgi.py 文件才能将它们获取到 Django(改编自 http://ericplumb.com/blog/passing-apache-environment-variables-to-django-via-mod_wsgi.html ):

from django.core.wsgi import get_wsgi_application
_application = get_wsgi_application()

def application(environ, start_response):
os.environ['MEDIA_ROOT'] = environ.get('MEDIA_ROOT', '')
return _application(environ, start_response)

这是一项繁重的工作,但如果您要设置自己的服务器,那么这可能是值得的。

使用 MEDIA_ROOT = '/media/' 并让 Apache 为您重定向它(在您的虚拟主机中)会更容易:

Alias /media/ /absolute/path/to/media/root

在您的设置中,您可以执行以下操作:

MEDIA_ROOT = os.environ.get("MEDIA_ROOT", '/media/')

并在您的开发环境中定义环境变量..

ps:根据您正在编写的软件(例如可重用包),您可能不需要包含 settings.py 文件..

关于python - Django:media_root 的相对路径不在项目目录中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43356210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com