我使用Django开发版本制作Django管理网站
但是它没有CSS样式:
我能做什么?
谢谢
Answers:
Django不会自行提供静态文件。您必须告诉它文件在哪里。
将在settings.py ADMIN_MEDIA_PREFIX将在正确的位置指向Django的。
由于您使用的是开发版本,因此需要特定于开发人员的静态文件how-to文档。亚当的链接将带您进入1.2版本。
设置完STATIC_ROOT
和之后STATIC_URL
,您可能需要运行
python manage.py collectstatic
STATIC_ROOT
STATIC_URL
STATIC_ROOT=os.path.join(BASE_DIR, "staticfiles")"
STATIC_URL="/static/"
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。
static/admin
里面,static/css/
那么我可以访问css文件。因此,似乎可以访问css文件,即使它们位于内,static/files
但collectstatic并未将它们放在此处。当然,手动移动文件夹是行不通的,因为模板会继续指向static/admin
。
在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',
我阅读了其他一些试图解决此问题的线程...像其他线程一样重新命名为别名。这假定您自己的自定义应用程序正确提供了静态文件,这表明您的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
希望这对某人有帮助...关于这个话题有很多话题。:(
在/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查找器找到所有静态文件。STATICFILES_DIRS
位置,并直接包含该新位置。我没有用这个答案对安全性发表任何评论,这只是我能够使用Web服务器为小型项目开发的方式。我希望您想要CDN,如django所建议的那样,如果您要进行更大的规模。
更新:我只是碰到了这个问题,而这种方法并没有完全按照我想的去做。最终对我有用的是在我运行后,我collectstatic
将管理静态文件复制STATICFILES_ROOT
到了我自己的静态文件所使用的目录中。那为我解决了这个问题。
除了许多其他有用的答案外,我还有一个尚未注意到的问题。从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/
现在我的管理站点可以正常工作了。
在遵循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为我工作
Content-Type: text/plain
,并且未在页面上呈现。
在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)
在使用通用系统级python解释器之前,通过为项目创建新的虚拟环境解决了我的问题。
$ mkvirtualenv myproject
跑: 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>
这肯定可以工作!
如果您在settings.py中为STATICFILES_DIRS设置了一个值,并且声明的文件夹不存在或位于错误的位置,则将导致管理员没有样式,例如,通过定义STATICFILES_DIRS =(os.path.join(BASE_DIR,“ static” )),并且静态文件夹不存在
在尝试了数千条建议后失败了,我终于找到了一个有帮助的解决方案。这是我尝试过的和正在使用的。我正在使用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 %}" />
这为我解决了这个问题。
问题是在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/;
}
这很好,很容易。我(手动)移动了文件夹。只是您必须static/admin
从主项目的目录复制您的文件,然后将其粘贴到 public_html( static/
如果没有静态文件夹),则必须在终端中运行以下命令
python manage.py collectstatic
在这里,您可以使用Django admin的CSS工作