为什么我的Django管理网站没有CSS样式


85

我使用Django开发版本制作Django管理网站

但是它没有CSS样式:

替代文字

我能做什么?

谢谢


2
是否有引用的样式无法加载?
Pekka 2010年

1
您需要配置开发服务器以提供静态文件:docs.djangoproject.com/en/1.2/howto/static-files
Adam Vandenberg 2010年

1
@Pekka,是的,这是django的默认样式,它在D:\ Python25 \ Lib \ site-packages \ django \ contrib \ admin \ media
zjm1126 2010年

1
我遇到了同样的问题,即管理静态内容不可查看,但是使用了Nginx(而不是开发环境)。基本上,请检查您的nginx配置文件,并确保它是“ collectstatic”的位置。详情点击此处:serverfault.com/questions/403264/...
威尔

Answers:


14

Django不会自行提供静态文件。您必须告诉它文件在哪里。

在settings.py ADMIN_MEDIA_PREFIX将在正确的位置指向Django的。

由于您使用的是开发版本,因此需要特定于开发人员的静态文件how-to文档。亚当的链接将带您进入1.2版本。


11
很好的答案,但settings.py已弃用并且不存在。阅读以下内容,了解更多最新解决方案。
RussellStewart 2013年

我有同样的错误,但是在Flask中,我将CSS放在了静态文件夹中。并使用jinj2 2 suntax即{{url_for('static',filename ='css / style.css')}},但仍然在我的笔记本电脑上出现此错误。我强制刷新页面,但问题仍然存在。请帮助
Salman Mushtaq

67

设置完STATIC_ROOT和之后STATIC_URL,您可能需要运行

python manage.py collectstatic

1
这也适用于1.5.2。我不必更改或添加任何文件或代码
lukik 2013年

1
可能对某人有用:您应为和使用相同的名称,例如:我将“ staticfiles”“ static”组合在一起,并使用和。我的应用程序运行良好,但找不到管理文件。因此将其更改为“ staticfiles”“ static”STATIC_ROOTSTATIC_URLSTATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"STATIC_URL="/static/"
elano7

17

ADMIN_MEDIA_PREFIX现在已弃用,请STATIC_URL改用。可以STATIC_URL = '/static/'在settings.py中进行设置。尝试:

import os.path  import sys

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

然后:

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

适用于Django 1.4 pre-alpha SVN-16920。


1
这对我也不起作用。我注意到,如果我将文件夹手动移动到static/admin里面,static/css/那么我可以访问css文件。因此,似乎可以访问css文件,即使它们位于内,static/files但collectstatic并未将它们放在此处。当然,手动移动文件夹是行不通的,因为模板会继续指向static/admin
toto_tico 2012年

在尝试运行由Django v1.2创建,在1.3上进行测试,然后在v1.4上重新部署的管理界面时为我工作。运行Ubuntu 12.04 LTE
Adam Lewis

9

在Django Book Tutorial之后,我也遇到了这个问题。在第5章“安装模型”中,该书提到默认的INSTALLED_APPS时说:“通过在它们前面加上一个井号(#),暂时注释掉所有这六个字符串。” http://www.djangobook.com/en/2.0/chapter05.html

然后,在第6章中,该书告诉读者取消注释这6行的第4行-“请注意,我们在第5章中注释了这四个INSTALLED_APPS条目。”

但是statcifiles行是将CSS恢复到管理页面所需要的,因此请不要注释'django.contrib.staticfiles',


上面建议的在settings.py文件中取消注释'django.contrib.staticfiles'也对我有用。默认情况下,“ django.contrib.staticfiles”应出现在INSTALLED_APPS下的settings.py文件中。感谢克里斯的建议。
user2471242 2013年

也可以从Django书中获得。删除一个字符就可以了。
pbarill

8

我阅读了其他一些试图解决此问题的线程...像其他线程一样重新命名为别名。这假定您自己的自定义应用程序正确提供了静态文件,这表明您的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

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


这是答案的作品像魅力谢谢taylor.well做
Spikie

3

/project_name/project_name/settings.py您需要设置STATIC_URL以告诉您的站点用于静态文件的URL。

然后设置STATIC_ROOT为文件系统上的某个文件夹,该文件夹与STATICFILES_DIRS列表中列出的任何目录都不相同。

一旦STATICFILES_ROOT设置,您将python manage.py collectstatic在项目目录中运行。

这将复制所有管理静态文件以及STATICFILES_DIRS列表中列出的任何其他文件夹中的所有文件。基本上,这会将所有静态文件放在一个位置,因此您可以在部署站点时将其移动到CDN。如果您像我一样并且没有CDN,则有两种选择:

  1. 将您设置为的文件夹添加STATIC_ROOTSTATICFILES_DIRS列表中。这将允许django中的staticfiles查找器找到所有静态文件。
  2. 将整个静态文件文件夹移动到文件系统上的其他STATICFILES_DIRS位置,并直接包含该新位置。

我没有用这个答案对安全性发表任何评论,这只是我能够使用Web服务器为小型项目开发的方式。我希望您想要CDN,如django所建议的那样,如果您要进行更大的规模。

更新:我只是碰到了这个问题,而这种方法并没有完全按照我想的去做。最终对我有用的是在我运行后,我collectstatic将管理静态文件复制STATICFILES_ROOT到了我自己的静态文件所使用的目录中。那为我解决了这个问题。


3

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

我的settings.py配置有:

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

根据这个答案

Django现在期望在URL / admin /下找到admin静态文件。

我有一个符号链接/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/

现在我的管理站点可以正常工作了。


2

如果您使用Apache服务器托管django网站,则需要确保静态别名指向您的/ directory到site / site_media / static /。如果您的静态文件位于site / site / site_media / static /的/目录中,则先前的Apache别名配置将不起作用。


2

在遵循Django教程的同时,我遇到了类似的问题,在我的情况下,问题是开发服务器在提供CSS文件时使用的模仿类型。

投放的模仿类型为“ application / x-css”,导致在Chrome中出现以下警告消息(在开发人员工具的“网络”标签中):

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

我发现的解决方法:在django webapp的manage.py文件中添加以下几行,以更改要提供服务的mimetype:

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

注意:在Python 2.7和Chrome 40.0上使用Django 1.7.4为我工作


在Django 2.2.1上尝试了此操作,但它不起作用。我的管理面板静态.css文件由nginx使用HTTP代码200提供,但Chrome表示它们以的形式进入Content-Type: text/plain,并且未在页面上呈现。
user5359531

2

在django-1.10.5和python-2.7.13中开发网站时遇到的同类问题。但是在我的firefox-51和chrome中,登录页面可以获取CSS,但仍然没有样式。但是奇怪的是它正在IE-8上工作。

我试图做这里提到的所有可能的事情,并适合我的SW版本集。没有工作。

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

刚刚发布,如果它可以帮助某人...

编辑:后来我发现,在python-2.7.13中,在settings.py中编写了以下两行(以及清除浏览器的缓存)可以解决问题

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


1

确保'django.contrib.staticfiles'在你INSTALLED_APPS在你的settings.py


1

跑: python manage.py collectstatic

将此行添加到位于/etc/apache2/sites-available/000-default.conf的Vhost中

别名/ 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>

这肯定可以工作!


很好的答案。我只需要运行collectstatic命令。
PowerAktar

0

如果您在settings.py中为STATICFILES_DIRS设置了一个值,并且声明的文件夹不存在或位于错误的位置,则将导致管理员没有样式,例如,通过定义STATICFILES_DIRS =(os.path.join(BASE_DIR,“ static” )),并且静态文件夹不存在


0

在尝试了数千条建议后失败了,我终于找到了一个有帮助的解决方案。这是我尝试过的和正在使用的。我正在使用django-1.11和nginx Web服务器。首先,我确保我的CSS / js文件在浏览器的控制台中未获取404。之后,我可以看到警告

资源被解释为样式表,但通过MIME类型的文本/纯文本传输

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

type="text/css"

现在这些行如下所示:

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

这为我解决了这个问题。


0

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

  • 将settings.py中的配置设置为以下内容

    STATIC_URL = '/static/'
    
    BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
    STATIC_ROOT = os.path.join(BASE_DIR, 'static')
    
  • 运行以下命令在静态文件夹中创建css和js文件

    $ python manage.py collectstatic
    
  • / etc / nginx / sites-enabled / example(Nginx)中的配置以提供静态文件

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

0

这很好,很容易。我(手动)移动了文件夹。只是您必须static/admin从主项目的目录复制您的文件,然后将其粘贴到 public_html( static/如果没有静态文件夹),则必须在终端中运行以下命令

python manage.py collectstatic

在这里,您可以使用Django admin的CSS工作


0

配置静态文件 确保该文件django.contrib.staticfiles包含在INSTALLED_APPS中

在您的settings.py文件中,定义STATIC_URL,例如:

STATIC_URL = '/static/'

有关更多详细信息, 静态文件

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.