为啥我的 Django 管理站点没有样式/CSS 加载?
Posted
技术标签:
【中文标题】为啥我的 Django 管理站点没有样式/CSS 加载?【英文标题】:Why does my Django admin site not have styles / CSS loading?为什么我的 Django 管理站点没有样式/CSS 加载? 【发布时间】:2011-05-24 03:38:56 【问题描述】:我使用 Django development version 创建了一个 Django 管理站点,但没有设置样式:
【问题讨论】:
是否有引用的样式未加载? 您需要配置开发服务器以提供静态文件:docs.djangoproject.com/en/1.2/howto/static-files @Pekka ,是的,它是 django 默认样式,在 D:\Python25\Lib\site-packages\django\contrib\admin\media 我遇到了同样的问题,即管理静态内容不可行,但使用 nginx(而不是开发环境)。基本上,检查您的 nginx 配置文件并确保它是您的“collectstatic”的位置。详情在这里:serverfault.com/questions/403264/… 【参考方案1】:设置STATIC_ROOT
和STATIC_URL
后,您可能需要运行
python manage.py collectstatic
【讨论】:
这也适用于 1.5.2。我不必更改或添加任何文件或代码 可能对某人有用:您应该为STATIC_ROOT
和STATIC_URL
使用同名,例如:我结合了 "staticfiles" 和“静态”,使用了STATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"
和STATIC_URL="/static/"
。我的应用程序运行良好,但找不到管理文件。所以将其同时更改为 "staticfiles" 或 "static"
尝试了多种方法,但这解决了问题。【参考方案2】:
ADMIN_MEDIA_PREFIX
现在已弃用,请改用STATIC_URL
。在 settings.py 中设置 STATIC_URL = '/static/'
应该可以完成这项工作。试试:
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。
【讨论】:
这对我也不起作用。我注意到,如果我(手动)将文件夹static/admin
移动到 static/css/
内,那么我可以访问 css 文件。所以似乎我可以访问 css 文件,只要它们在 static/files
内,但 collectstatic 并没有把它们放在那里。当然,手动移动文件夹是行不通的,因为模板继续指向static/admin
。
在尝试运行使用 Django v1.2 创建的管理界面时为我工作,在 1.3 上测试,然后在 v1.4 上重新部署。运行 Ubuntu 12.04 LTE
在我的例子中,我必须在应用程序中移动静态文件夹,只要确保 PROJECT_ROOT 指向 setting.py 的根目录。就我而言,它指向父文件夹。【参考方案3】:
Django 不自己提供静态文件。你必须告诉它文件在哪里。
ADMIN_MEDIA_PREFIX in the settings.py 会将 Django 指向正确的位置。
由于您使用的是开发版本,因此您需要dev-specific document for static files how-to。 Adam 的链接将引导您到 1.2 版本。
【讨论】:
很好的答案,但现在已弃用,并且在 settings.py 中不存在。阅读下文了解更多最新解决方案。 我有同样的错误,但在 Flask 中,我将我的 css 放在静态文件夹中。并使用 jinj2 2 suntax 即 url_for('static', filename='css/style.css') ,但仍然在我的笔记本电脑上出现此错误。我强制刷新页面,但问题仍然存在。请帮忙【参考方案4】:我花了两天的时间尝试什么不!
最后将settings.py文件中的DEBUG改成:
调试 = 真
它成功了。
附言-
安全警告:不要在生产环境中打开调试运行!
【讨论】:
【参考方案5】:我阅读了其他几个线程试图解决这个问题...与其他线程一样使用别名。 这假设您自己的自定义应用程序正确地提供静态文件,这表明您的 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
希望这对某人有所帮助...关于这个主题有很多线程。 :(
【讨论】:
【参考方案6】:我在 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 文件中。感谢克里斯的建议。 也从 Django Book 中获得。删除一个字符就可以了。【参考方案7】:在/project_name/project_name/settings.py
中,您需要设置STATIC_URL
来告诉您的站点使用哪个url 来存储静态文件。
然后将STATIC_ROOT
设置为文件系统上的某个文件夹,该文件夹与STATICFILES_DIRS
列表中列出的任何目录都不相同。
一旦设置了STATICFILES_ROOT
,您就可以从项目目录运行python manage.py collectstatic
。
这将复制所有管理静态文件以及STATICFILES_DIRS
列表中列出的任何其他文件夹中的所有文件。基本上,这会将您的所有静态文件放在一个位置,这样您就可以在部署站点时将它们移动到您的 CDN。如果你和我一样没有 CDN,那么你有两种选择:
-
将您设置为
STATIC_ROOT
的文件夹添加到STATICFILES_DIRS
列表中。这将允许 django 中的静态文件查找器找到所有静态文件。
将包含静态文件的整个文件夹移至文件系统上的其他位置,并指示 STATICFILES_DIRS
包含该新位置。
我对这个答案没有任何关于安全性的看法,这只是我能够使用我的 Web 服务器为小型项目开发的方式。如果您正在做更大规模的事情,我希望您会想要一个 django 建议的 CDN。
更新:
我刚刚遇到了这个问题,这种方法并没有完全达到我认为你想要的效果。最终对我有用的是在我运行collectstatic
之后,我刚刚将它放入STATICFILES_ROOT
的管理静态文件复制到了我用于我自己的静态文件的目录中。这为我解决了这个问题。
【讨论】:
【参考方案8】:除了许多其他有用的答案之外,我还有一个尚未注意到的问题。从 Django 1.3 升级到 1.6 后,我的静态文件目录的 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/
现在我的管理站点可以正常工作了。
【讨论】:
我有一个带有简单文件的简单项目。我的 css 在本地运行时加载,但是当我托管我的网站时 css 不加载,请帮助。【参考方案9】:如果您使用 Apache 服务器来托管您的 django 站点,您需要确保静态别名指向您的 / 目录到 site/site_media/static/。如果您的静态文件位于 site/site/site_media/static/ 的 /directory 中,则以前的 Apache 别名配置将不起作用。
【讨论】:
【参考方案10】:在学习 Django 教程时,我遇到了类似的问题,在我的情况下,问题是开发服务器在提供 css 文件时使用的 mimetype。
提供的 mimetype 是“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
的形式出现,并且它们没有在页面上呈现。【参考方案11】:
我在 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)
【讨论】:
【参考方案12】:通过为项目创建新的虚拟环境解决了我的问题,在此之前我使用的是通用系统级 python 解释器。
$ mkvirtualenv myproject
参考:https://docs.djangoproject.com/en/2.1/howto/windows/
【讨论】:
【参考方案13】:运行: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 命令。【参考方案14】:问题是在 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/;
【讨论】:
【参考方案15】:确保 'django.contrib.staticfiles'
在您的 settings.py 中的 INSTALLED_APPS
中
【讨论】:
【参考方案16】:这很好用而且很容易。我(手动)移动了文件夹。只是你必须从主项目的目录中复制你的 static/admin
并将其粘贴到 public_html static/
如果没有静态文件夹,你必须在终端中运行以下命令
python manage.py collectstatic
在这里你可以使用 Django admin 的 css 工作
【讨论】:
【参考方案17】:我看到有很多答案,但没有一个对我有用,所以我发布了我自己的。 为我解决的问题是将静态文件 URL 添加到应用程序的根 URL。我需要将此 URL 添加到我的 URL 列表中:
urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT)
您还需要两个导入:
from django.conf import settings
from django.conf.urls.static import stati
更多可以在这个article查看。
【讨论】:
【参考方案18】:如果您在 settings.py 中为 STATICFILES_DIRS 设置了一个值,并且声明的文件夹不存在或位置错误,则会导致管理员没有样式 例如 通过定义 STATICFILES_DIRS = ( os.path.join(BASE_DIR,"static")) 并且静态文件夹不存在
【讨论】:
【参考方案19】:在尝试了 1000 条建议后失败了,我终于找到了一个有用的解决方案。这是我尝试过的和正在使用的。 我正在使用 django-1.11 和 nginx 网络服务器。 首先,我确保我的 CSS/js 文件在浏览器的控制台中没有得到 404。之后,我可以看到一个警告
资源解释为样式表,但使用 mime 类型 text/plain 传输
我在管理模板中找到了 base.html 并删除了
type="text/css"
现在这些行看起来像这样:
<link rel="stylesheet" href="% block stylesheet %% static "admin/css/base.css" %% endblock %" />
这为我解决了这个问题。
【讨论】:
【参考方案20】:配置静态文件
确保django.contrib.staticfiles
包含在您的INSTALLED_APPS 中。
在你的settings.py文件中,定义STATIC_URL,例如:
STATIC_URL = '/static/'
了解更多详情 static files
【讨论】:
【参考方案21】:管理面板工作正常,但未加载 css。这适用于 Lightsail Django with Apache
1.在settings.py
中定义STATIC_ROOT和STATIC_URL
STATIC_ROOT = '/opt/bitnami/projects/decisions/decision/'
STATIC_URL = '/static/'
2.Eject(复制)管理资产文件到项目
运行python manage.py collectstatic
此命令使用css/
fonts/
img/
js/
子文件夹创建/opt/bitnami/projects/decisions/decision/admin
文件夹
3.使 /static url 可从 apache 访问
将此sn-p粘贴到/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
【讨论】:
【参考方案22】:检查您的 settings.py 文件
STATIC_URL = '/static/'
开头和结尾都应该有反斜杠'/'..
【讨论】:
以上是关于为啥我的 Django 管理站点没有样式/CSS 加载?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我的 Fastcomet Django 网站没有加载 css?