微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Django Admin样式表不会加载到生产服务器上

Django的内置管理站点的样式表没有加载到运行Django 1.6的生产服务器上.我可以看到很多其他人遇到过这个问题,我已经尝试了所有提供给他们的解决方案但没有工作.我的Django站点Nginx v.1.2.1代理后面的Gunicorn 19.1.1之上运行.

由于我将构建一个仪表板,并且将使用管理站点,而不仅仅是管理我的用户,组和模型,我在我的站点内创建了一个“admin”应用程序:

INSTALLED_APPS += ('apps.admin', )

我正在覆盖并扩展一些Django的管理模板,并从django.contrib.admin.templates复制它们:

/www/site/apps/admin/__init__.py
/www/site/apps/admin/models.py
/www/site/apps/admin/views.py
/www/site/apps/admin/urls.py
/www/example/apps/admin/templates/admin/base.html
/www/example/apps/admin/templates/admin/base_site.html
/www/example/apps/admin/templates/admin/index.html
/www/example/apps/admin/templates/admin/my_dashboard.html # mine

以下是我的urls.py文件中的相关设置

from django.contrib import admin
admin.autodiscover()
urlpatterns = patterns('',
    # ...
    url(r'^admin/', include(admin.site.urls)),
    url(r'^admin/dashboard/$',
        'apps.admin.views.dashboard',
        {'template': 'my_dashboard.html'},
        name='dashboard'),
)

这是我的设置.我的网站的实际静态文件位于此处:

/www/example/static/css
/www/example/static/js

这是我的静态根. Django文档说它应该与静态文件的实际位置不同.

STATIC_ROOT = "/var/www/example/static/"

我的静态URL的前缀:

STATIC_URL = '/static/'

静态文件和查找程序的位置:

STATICFILES_Dirs = (
    '/www/example/static'
)
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

我的Nginx配置文件

upstream gunicorn {
    server 127.0.0.1:8000 fail_timeout=0;
}
server {
    listen 80;
    server_name www.example.com;
    rewrite ^/(.*) http://example.com/$1 permanent;
}
server {
    listen 80;
    server_name example.com;
    root /www/example;
    client_max_body_size 4G;
    keepalive_timeout 5;
    location /static/ {
        alias /www/example/static/;
    }
    location /media/ {
        alias /var/www/example/media/;
    }
    try_files $uri @django;
    location @django {
        proxy_pass http://gunicorn;
        proxy_redirect off;
        proxy_set_header Host $http_host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    error_page 500 502 503 504 /500.html;
    location = /500.html {
        root /www/example/static;
    }
}

我可以看到该站点是服务器我的静态文件正确.例如,我可以看到这个图像:

http://example.com/static/img/small_img.jpg

但是当我尝试访问Django样式表时,Nginx引发了404错误

http://example.com/static/admin/css/base.css

…即使在我的浏览器中执行查看源显示这些链接

<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css" />
<link rel="stylesheet" type="text/css" href="/static/admin/css/login.css" />

以下是我做过的其他事情:

>我确认“django.contrib.staticfiles”和“django.contrib.admin”在INSTALLED_APPS中.
>我进入了Python shell并验证了我的STATIC_ROOT,STATIC_URL和STATICFILES_DIR设置.
>我在我的服务器上运行了“collectstatic”命令并验证它将Django管理站点静态文件复制到我的STATIC_ROOT.
>我尝试在我的Nginx配置文件添加一个额外的位置指令,如here所述,并重新启动我的Nginx服务.
>我尝试创建一个目录/ www / example / static / admin目录,然后在其中创建一个“静态”符号链接,指向我的虚拟环境目录中的静态目录… / django / contrib / admin / static /.
>我在Chrome中加载了管理员主页,其中可以看到Developer Console,看看是否发生了奇怪的事情,但它只报告了404错误.

我将通过将Django的静态文件复制到我网站的静态文件目录并更改我的base.html版本中的hrefs来尝试“猴子修补”.但是,这不是一个好的解决方案.

对不起这么长的帖子.谁能告诉我我做错了什么?除此之外,管理员网站似乎正在运行.它只是不加载的样式表.谢谢!

解决方法:

看起来你的STATIC_ROOT与Nginx的位置/静态/别名不匹配.你缺少/ var /

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐