如何在生产中发布Django静态文件

时间:2016-03-16 11:25:48

标签: python django

我无法让我的Django应用程序在生产环境中获取静态文件。

在settings.py中,我指定了

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, "static"),
)
STATIC_ROOT = '/var/www/static/'

我已将django.contrib.staticfiles包含在INSTALLED_APPS中。

我运行manage.py collectstatic并将静态文件移动到/ var / www / static /.

html结果显示,例如来自具有<link rel="stylesheet" type="text/css" href="/static/myStyleSheet.css">的django文件中的<link rel="stylesheet" type="text/css" href="{% static 'myStyleSheet.css' %}">

在我看来它应该有效,但我显然遗漏了一些东西。我在静态文件上遇到404错误。

1 个答案:

答案 0 :(得分:6)

我们通过运行python manage.py runserver在本地使用的django服务器是一个开发服务器,不能在生产中使用。

在生产中,我们将使用一个Web服务器,它从HTTP / HTTPS端口获取请求,并根据我们的配置,将请求转发到运行应用服务器(例如。gunicorn)的端口,这将取代开发服务器我们用的。

问题在于,默认情况下,app服务器不会呈现静态文件。因此,您必须配置Web服务器来处理它。

在您的Web服务器配置中,您必须将网址/static/指向静态根文件夹。因此,Web服务器将从它指向的文件夹中呈现静态文件

修改

由于您使用的是apache,请将其添加到apache配置以使静态文件生效

Alias /static /home/user/myproject/static
<Directory /home/user/myproject/static>
    Require all granted
</Directory>

所以,这里我们是静态根路径的别名/静态。现在,对/static/css/my.css的请求将更改为:/home/user/myproject/static/css/my.css并且相应的文件将被发回