在Heroku上部署django app时,如何设置MEDIA_ROOT和MEDIA_URL

Sec*_*ter 2 python django heroku

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

我在一个名为'media'的文件夹中有我的js和css文件.看起来这些通常都放在'静态'中,但是我在上面构建的项目已经将它们放在媒体中,所以我只是选择了它.

所以我有:

<link rel="stylesheet" type="text/css" media="screen" href="{{ MEDIA_URL }}css/style.css" />
Run Code Online (Sandbox Code Playgroud)

在我的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/'
Run Code Online (Sandbox Code Playgroud)

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

DEBUG = False
Run Code Online (Sandbox Code Playgroud)

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

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

编辑:我应该指出我不会将任何内容上传到'media'文件夹.

Chr*_*att 12

MEDIA_URL并且MEDIA_ROOT共同决定上传的位置,即在模型上添加到FileFields或ImageFields的任何内容.

STATIC_URL并且STATIC_ROOT一起指示collectstatic管理命令将转储静态资源的位置,以及随后将使用哪个URL前缀来获取它们.你实际上并没有手动放入任何东西STATIC_ROOT.

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

然后,在生产中你运行python manage.py collectstatic.每个应用程序的"静态"目录中的所有文件以及每个目录都STATICFILES_DIRS将被转储STATIC_ROOT.然后,您可以设置您的网络服务器(Apache时,Nginx的,等)服务STATIC_ROOTSTATIC_URL.

在Django 1.3中,您还需要指定ADMIN_MEDIA_PREFIX以使管理员工作:

ADMIN_MEDIA_PREFIX = STATIC_URL + 'admin/'
Run Code Online (Sandbox Code Playgroud)

在Django 1.4中,这将不再是必要的.