【问题标题】:How to post Django static files in production如何在生产中发布 Django 静态文件
【发布时间】:2016-03-16 11:25:48
【问题描述】:

我无法让我的 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"> 来自具有 <link rel="stylesheet" type="text/css" href="{% static 'myStyleSheet.css' %}"> 的 django 文件。

在我看来它应该可以工作,但我显然错过了一些东西。我在静态文件上遇到 404 错误。

【问题讨论】:

  • 你使用什么网络服务器?例如。阿帕奇,nginx..等

标签: python django


【解决方案1】:

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

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

这里的问题是,应用服务器默认不渲染静态文件。因此,您必须配置 Web 服务器来处理它。

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

编辑

由于您使用的是 apache,请将其添加到 apache 配置中以使静态文件正常工作

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

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

【讨论】:

  • 那个目录应该改成OP的STATIC_ROOT
  • @rnevius :这只是一个例子。我认为 OP 会很聪明地改变它:P
  • 我已将 /home/user/myproject/static 更改为 /var/www/static/,现在文件上出现 500 错误
  • @HenryM 500 静态文件错误?可能这应该有助于stackoverflow.com/questions/15428146/…
猜你喜欢
  • 1970-01-01
  • 2017-03-05
  • 2015-06-19
  • 2017-12-30
  • 2018-07-26
  • 2018-09-25
  • 1970-01-01
  • 1970-01-01
  • 2015-01-08
相关资源
最近更新 更多