Django:无法从 DigitalOcean Droplet 上的模板加载静态文件

Posted

技术标签:

【中文标题】Django:无法从 DigitalOcean Droplet 上的模板加载静态文件【英文标题】:Django: can't load static files from template on DigitalOcean Droplet 【发布时间】:2015-07-31 22:04:32 【问题描述】:

我在 DigitalOcean 机器上运行的 Django 应用中从模板加载静态文件时遇到问题。

这是我的 nginx 配置文件(etc/nginx/sites-available/django):

# your Django project's static files - amend as required
location /static 
    alias /home/workspace/app-toscana/django/djangoapptoscana/djangoapptoscana/static;

这是我的 settings.py 文件:

STATIC_PATH = os.path.join(BASE_DIR,'static')

STATIC_URL = '/static/' # You may find this is already defined as such.

STATICFILES_DIRS = (
    STATIC_PATH, )

这是一个模板文件调用的例子:

% load staticfiles %
<!DOCTYPE html>
<html>
  <head>
    <meta charset="UTF-8">
    <title>AdminLTE 2 | Dashboard</title>
    <meta content='width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no' name='viewport'>
    <!-- Bootstrap 3.3.4 -->
    <link href="% static 'bootstrap/css/bootstrap.min.css' %" rel="stylesheet" type="text/css" />

我尝试了不同的解决方案,尤其是更改了 settings.py 文件,但没有任何结果。 也许在我找不到的 Nginx 和 gunicorn 配置中存在任何问题。

【问题讨论】:

尝试找出错误所在的配置部分。在模板文件中创建的链接是否符合您的预期?将文件放在/home/workspace/app-toscana/django/djangoapptoscana/djangoapptoscana/static 中(如果还没有,请尝试在/static/myfile.txt 访问它。检查Nginx 日志的内容。重新阅读static files deployment docs。特别是,您似乎没有已设置STATIC_ROOT 或运行collectstatic。祝你好运:) 设置了 STATIC_ROOT。使用命令python manage.py runserver localhost:9000 手动运行服务器我在服务器外壳上看不到任何特定问题,但是如果我尝试使用公共 IP 服务器地址访问该页面,我无法加载收到 404 错误的静态文件(在静态文件上)。例如。 GET http://188.166.72.87/static/bootstrap/css/bootstrap.min.css =&gt; STATUS 404 我也执行了collecstatic 命令,没有任何结果。 runserver 和 nginx 太不一样了。 STATIC_ROOT 是如何定义的,您的问题中没有这样的代码。另外,请尝试从您的实时设置中删除STATICFILES_DIRS,看看效果如何,然后我会解释。 这是我的静态文件配置(来自 settings.py)STATICFILES_FINDERS = ( 'django.contrib.staticfiles.finders.FileSystemFinder', 'django.contrib.staticfiles.finders.AppDirectoriesFinder' ) STATIC_ROOT = '/home/workspace/app-toscana/django/djangoapptoscana/static/' STATIC_URL = '/static/' 没有 STATIC_PATHSTATIC_DIR 变量。 【参考方案1】:

希望我找到了解决此问题的方法。这是一个许可问题。在我的 DigitalOcean 机器上,我将 django 应用程序目录的所有者设置为 root:root

chown -R root:root /home/django/djangoapptoscana/dashboard

以及静态文件目录的所有者为 django:django

chown -R django:django /home/django/djangoapptoscana/djangoapptoscana/static

【讨论】:

以上是关于Django:无法从 DigitalOcean Droplet 上的模板加载静态文件的主要内容,如果未能解决你的问题,请参考以下文章

ERR_TOO_MANY_REDIRECTS 当我去域:Nginx,Daphne,Django,DigitalOcean

使用 nginx gunicorn 在 digitalocean 上部署 django react

Django App TypeError django.views.i18n.javascript_catalog

在 digitalocean 上部署后未加载静态文件

无法使用正确的用户名和密码登录到 Django 管理员

Django wsgi Apache2:'AH01630:服务器配置拒绝客户端'