我已经使用他们的免费帐户在 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_URL
和 MEDIA_ROOT
一起决定上传的位置,即添加到 FileField
或 ImageField
的任何内容你的模型。
STATIC_URL
和 STATIC_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/