为什么我的 Django 管理站点没有样式/CSS 加载?

我使用 Django 开发版本制作了一个 Django 管理站点,但它没有被设计:

alt text

102526 次浏览

Django does not serve static files on it's own. You have to tell it where the files are.

在 setings.py 中的 ADMIN _ MEDIA _ PREFIX会把姜戈指向正确的位置。

因为您使用的是开发版本,所以您需要 用于静态文件 how-to 的 dev 特定文档

现在不推荐使用 ADMIN_MEDIA_PREFIX,改为使用 STATIC_URL。在 setings.py 中设置 STATIC_URL = '/static/'应该可以完成这项工作。尝试:

import os.path
import sys


PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))

and then:

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static')
STATIC_URL = '/static/'

Works on Django 1.4 pre-alpha SVN-16920.

在设置好 STATIC_ROOTSTATIC_URL之后,您可能需要运行

python manage.py collectstatic

/project_name/project_name/settings.py中,您需要设置 STATIC_URL来告诉您的站点静态文件使用什么 URL。

Then set STATIC_ROOT to be some folder on your filesystem that is not the same as any of your directories listed in STATICFILES_DIRS list.

一旦设置了 STATICFILES_ROOT,您将从项目目录运行 python manage.py collectstatic

这将复制所有的管理静态文件和所有文件在任何其他文件夹中列出的 STATICFILES_DIRS列表。基本上,这将把所有静态文件放在一个地方,这样您就可以在部署站点时将它们移动到 CDN。如果你像我一样没有 CDN,那么你有两个选择:

  1. Add the folder you set as STATIC_ROOT to the STATICFILES_DIRS list. This will allow the staticfiles finders in django to locate all the static files.
  2. 将静态文件的整个文件夹移动到文件系统的其他位置,并指示 STATICFILES_DIRS包含该新位置。

我没有对这个答案的安全性做任何评论,这只是我能够用我的 Web 服务器为小型项目开发的方式。我希望你会希望一个 CDN 的姜戈建议,如果你正在做任何更大的规模。

更新: 我只是碰到了这个问题,这个方法并没有完全达到我想要的效果。在我运行了 collectstatic之后,我只是将它放入 STATICFILES_ROOT的管理员静态文件复制到我自己的静态文件所使用的目录中。解决了我的问题。

我在 Django 图书教程之后也遇到了这个问题。 在第5章 | 安装模型时,书中提到了默认的 INSTALLED _ APPS- “通过在这六个字符串前面放一个哈希字符(#)来临时注释掉它们。” Http://www.djangobook.com/en/2.0/chapter05.html

然后,在第6章,书告诉读者取消注释这6行中的4行- 注意,我们在第5章中注释掉了这四个 INSTALLED _ APPS 条目,现在取消注释

But the statcifiles line is what is needed to restore CSS to the admin page, so uncomment that “ django”

我读了其他几个线程,试图修复这一点... 诉诸别名,因为在其他线程。 这假设您自己的定制应用程序正确地提供静态文件,这将表明您的 STATIC _ ROOT 和 STATIC _ URL 具有正确的设置。

STATIC_ROOT = ''
STATIC_URL = '/static/'

然后(从静态目录) :

ubuntu@ip-1-2-3-4:/srv/www/mysite.com/app_folder/static$ sudo ln -s /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/ admin

希望这对某些人有所帮助... ... 关于这个话题有很多帖子。 :(

确保 'django.contrib.staticfiles'在您的设置.py 中的 INSTALLED_APPS

If you are using Apache server to host your django site, you need to make sure the static alias point to your /directory to site/site_media/static/. If your static files are in /directory to site/site/site_media/static/, the previous Apache alias configuration will not work.

除了许多其他有用的答案之外,我还有一个尚未被注意到的问题。在从 Django 1.3升级到1.6之后,我的 static files 目录有一个到 Django 管理静态文件的断开的符号链接。

我的 settings.py 配置为:

STATICFILES_DIRS = (
'/var/www/static/my-dev',
)

根据 this answer,

Django 现在希望在 URL 下找到管理员静态文件 /行政/。

我有一个符号链接 /var/www/static/my-dev/admin,它被设置为:

admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/media/

这个位置在 django 1.6中已经不存在了,所以我更新了链接到:

admin -> /usr/local/lib/python2.7/dist-packages/django/contrib/admin/static/admin/

现在我的管理网站正常工作。

在学习 Django 教程时,我遇到了类似的问题,在我的例子中,问题是开发服务器在提供 css 文件时使用的 imetype。

The mimetype served was 'application/x-css' which led to following warning message in Chrome (in the 'Network' tab of the Developer tools):

资源解释为样式表,但使用 MIME 类型传输 Application/x-css: “ http://127.0.0.1:8000/static/admin/css/base.css

我发现的解决方法是: 通过向 django webapp 的 manage.py 文件添加以下代码行来更改将要服务的 imetype:

import mimetypes
mimetypes.init()
mimetypes.types_map['.css'] = 'text/css'

Note: worked for me with Django 1.7.4 on Python 2.7 and Chrome 40.0

与我在 django-1.10.5和 python-2.7.13中开发站点时遇到的问题类似。但是在我的 firefox-51和 chrome 中,登录页面能够得到 css,但是仍然没有样式。但奇怪的是,它竟然能在 IE-8上工作。.

我尝试了这里提到的所有可能的事情,并且适合我的 sw 版本。

但是当我在其他使用 python-2.7.8的系统上尝试相同的站点时,它工作了。

刚刚发布的,如果能帮到别人的话..。

edited: later I found that in python-2.7.13, writing the following two lines in settings.py (plus clearing the cache of the browser) had done the trick

import mimetypes
mimetypes.add_type("text/css", ".css", True)

If you have a value set in settings.py for STATICFILES_DIRS and the declared folder doesn't exist or in wrong location it will cause the Admin to have no styling 例如: 通过定义 STATICFILES _ DIRS = (os.path.join (BASE _ DIR,“ static”)) 静态文件夹不存在

在尝试了1000条建议后失败了,我终于找到了一个有帮助的解决方案。下面是我试过的和我正在使用的。 I am using django-1.11 and nginx web server. 首先,我确保我的 CSS/js 文件在浏览器控制台中没有得到404。在那之后,我看到了一个警告

资源被解释为样式表,但使用 mime 类型 text/print 传输

我在管理模板中找到了 base.html 并删除了它

type="text/css"

and now the lines looks like this:

<link rel="stylesheet"  href="{% block stylesheet %}{% static "admin/css/base.css" %}{% endblock %}" />

这为我解决了问题。

我的问题是通过为项目创建新的虚拟环境来解决的,在此之前我使用的是通用系统级的 python 解释器。

$ mkvirtualenv myproject

Reference: https://docs.djangoproject.com/en/2.1/howto/windows/

运行: python manage.py collectstatic

Add this line to Vhost which located at : /etc/apache2/sites-available/000-default.conf

别名/static/admin//var/www/html/ example.com/static/admin

下面是 django 设置的整个 Vhost 设置

<VirtualHost *:80>
ServerName gautam.tech
ServerAlias www.gautam.tech


WSGIDaemonProcess gautam.tech python-path=/var/www/html/gautam.tech python-home=/var/www/html/gautam.tech/venv
WSGIProcessGroup gautam.tech
#Your static files location
Alias /static /var/www/html/gautam.tech/static
Alias /media/ /var/www/html/gautam.tech/media
Alias /static/admin/ /var/www/html/gautam.tech/static/admin


<Directory /var/www/html/gautam.tech/static>
Require all granted
</Directory>


<Directory /var/www/html/gautam.tech/media>
Require all granted
</Directory>


WSGIScriptAlias / /var/www/html/gautam.tech/myproject/wsgi.py


DocumentRoot /var/www/html/gautam.tech
<Directory /var/www/html/gautam.tech>
<Files wsgi.py>
Require all granted
</Files>
</Directory>


CustomLog /var/www/html/gautam.tech/access.log combined
ErrorLog /var/www/html/gautam.tech/error.log
</VirtualHost>

这一定会成功的!

这个问题在 dev/test/prod 服务器中,使用 Nginx,请按照以下步骤操作。

  • 将 setings.py 中的配置设置为如下内容

    STATIC_URL = '/static/'
    
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
  • Run the below command to create css and js files in static folder

    $ python manage.py collectstatic
    
  • config in /etc/nginx/sites-enabled/example (Nginx) to serve static files

    location /static/ {
    alias /project/root/folder/static/;
    }
    

这个工作很好,很容易。我(手动)移动了文件夹。只要你从主项目的目录中复制你的 static/admin,并粘贴到 Public _ html static/,如果没有静态文件夹,你必须在终端运行以下命令

python manage.py collectstatic

这是 Django 管理员的 css 工作

配置静态文件 确保 django.contrib.staticfiles包含在你的 已安装的应用程序中。

在 setings.py 文件中,定义 STATIC _ URL,例如:

STATIC_URL = '/static/'

了解更多细节 静态文件

管理面板工作良好,除了 css 没有加载。这为 光帆姜戈和阿帕奇工作

1. 在 settings.py中定义 STATIC _ ROOT 和 STATIC _ URL

STATIC_ROOT = '/opt/bitnami/projects/decisions/decision/'
STATIC_URL = '/static/'

向项目中弹出(复制)管理资产文件

运行 python manage.py collectstatic 此命令用 css/ fonts/ img/ js/子文件夹创建 /opt/bitnami/projects/decisions/decision/admin文件夹

3. 从 apache 访问/静态 URL

将此代码片段粘贴到 /opt/bitnami/apache2/conf/bitnami/bitnami.conf中(如果已经设置了 ssl,那么文件位置将是 /opt/bitnami/apache2/conf/bitnami/bitnami-ssl.conf)

Alias /static/ "/opt/bitnami/projects/decisions/decision/"
<Directory "/opt/bitnami/projects/decisions/decision/">
Order allow,deny
Options Indexes
Allow from all
IndexOptions FancyIndexing
</Directory>

4. 不要忘记重启 Apache

sudo /opt/bitnami/ctlscript.sh restart apache

我为了这事折腾了两天!

最后,将 setings.py 文件中的 DEBUG 更改为:

DEBUG = True

成功了。

附言

安全警告: 不要在生产中打开调试时运行!

我看到有很多答案,但没有一个对我有用,所以我发布了我自己的。 What solved it for me was adding a static files URL to the root URLs of the app. I needed to add this URL to my URLs list:

urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)

你还需要两个进口商品:

from django.conf import settings
from django.conf.urls.static import stati

在这个 article中可以看到更多。

检查您的 setings.py 文件

STATIC_URL = '/static/'

开头和结尾都应该有反斜杠’/’. 。