python - 在 Heroku 上部署 Django 应用程序时要将 MEDIA_ROOT 和 MEDIA_URL 设置为什么

标签 python django heroku

我已经使用他们的免费帐户在 Heroku 上部署了一个应用程序。

我的 js 和 css 文件位于一个名为“media”的文件夹中。看起来这些通常放在“静态”中,但我在其上构建的项目已经将它们放在媒体中,所以我就使用它了。

所以我有:

<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/style.css" />

在我的 settings.py 文件中,我有:

abspath = lambda *p: os.path.abspath(os.path.join(*p))

PROJECT_ROOT = abspath(os.path.dirname(__file__))

MEDIA_ROOT = abspath(PROJECT_ROOT, 'media')
MEDIA_URL = '/media/'

部署我的应用程序后,我设置:

DEBUG = False

现在我的模板在没有 CSS 的情况下呈现。我四处搜索,看起来像是 MEDIA_ROOT 和 MEDIA_URL 的问题。我发现的大部分内容都是关于让静态文件在生产中工作,或者让媒体文件在开发中工作。这看起来像是让媒体文件在生产中工作。

我究竟应该将 MEDIA_ROOT 和 MEDIA_URL 设置为什么?

编辑:我应该指出我不会将任何内容上传到“媒体”文件夹。

最佳答案

MEDIA_URLMEDIA_ROOT 一起决定上传的位置,即添加到 FileFieldImageField 的任何内容你的模型。

STATIC_URLSTATIC_ROOT 共同决定静态资源将被 collectstatic 管理命令转储的位置,以及随后将使用的 URL 前缀去取他们。您实际上从未手动将任何内容放入 STATIC_ROOT

如果您不使用媒体进行上传,则应将其名称更改为其他名称。我倾向于将“ Assets ”用于我的一般项目级静态资源,但名称无关紧要(“媒体”用于 MEDIA_ROOT 100 次中有 99 次,所以它只是令人困惑)。无论您使用什么,请将完整的目录路径添加到 STATICFILES_DIRS

然后,在生产环境中运行 python manage.py collectstatic。每个应用程序的“静态”目录中的所有文件以及 STATICFILES_DIRS 中的每个目录都将转储到 STATIC_ROOT 中。然后,您设置网络服务器(Apache、nginx 等)以在 STATIC_URL 处为 STATIC_ROOT 提供服务。

在 Django 1.3 中,您还需要指定 ADMIN_MEDIA_PREFIX 才能让管理员工作:

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'

在 Django 1.4 中,这将不再是必需的。

关于python - 在 Heroku 上部署 Django 应用程序时要将 MEDIA_ROOT 和 MEDIA_URL 设置为什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9710335/

相关文章:

python - 如何在表示图形的字典上行走并返回元素列表

python - 在 django-rest-framework-jwt 中存储超过默认信息

python - Django 休息框架忽略 has_object_permission

typescript - 如何在 Heroku 安装后编译 Typescript?

node.js - 如何存储开源 Heroku Node.js 应用程序的数据库凭据?

python - 在 Python 中窗口为 "out of focus"时读取 HID 输入

python - 获取着色器分配给的网格的名称

python - 在网络服务器之外运行 python 脚本

python - Django 管理员在清理表单时编辑内联对象

git - 连接到 Heroku node.js 应用程序中的数据库,而不在 git 上显示身份验证详细信息