我在我的本地机器(Mac OS X)上运行Django的开发服务器(runserver
),无法加载CSS文件。
以下是settings.py中的相关条目:
STATIC_ROOT = '/Users/username/Projects/mysite/static/'
STATIC_URL = '/static/'
STATICFILES_DIRS = (
'/Users/thaymore/Projects/mysite/cal/static',
)
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
INSTALLED_APPS = (
# other apps ...
'django.contrib.staticfiles',
)
在我的views.py中,我正在请求上下文:
return render_to_response("cal/main.html",dict(entries=entries),context_instance=RequestContext(request))
在我的模板中,{{ STATIC_URL }}
呈现正确:
<link type="text/css" href="{{ STATIC_URL }}css/main.css" />
变成:
<link type="text/css" href="/static/css/main.css"/>
这是文件实际所在的位置。我还运行collectstatic
以确保收集所有文件。
我的urls.py中还有以下几行:
from django.contrib.staticfiles.urls import staticfiles_urlpatterns
urlpatterns += staticfiles_urlpatterns()
我是Django的新手,所以我可能会错过一些简单的东西 - 会感激任何帮助。
请仔细阅读:https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/
django.contrib.staticfiles
在INSTALLED_APPS
的settings.py
?
是DEBUG=False
?如果是这样,你需要使用runserver
参数调用--insecure
:
python manage.py runserver --insecure
collectstatic
与通过开发服务器提供文件无关。它用于在一个位置STATIC_ROOT
中收集静态文件,供您的Web服务器查找它们。事实上,运行collectstatic
与你的STATIC_ROOT
设置在STATICFILES_DIRS
的路径是一个坏主意。您应该仔细检查以确保您的CSS文件现在都存在。
你在STATICFILES_DIRS和STATIC_ROOT中有相同的路径,我遇到了同样的问题,下面是例外 -
NotperlyConfigured:STATICFILES_DIRS设置不应包含STATIC_ROOT设置
对于本地,您不需要STATICFILES_DIRS,因为无论如何您不需要运行collectstatic。一旦你评论它,它应该工作正常。
您是否已添加到模板中:
{% load staticfiles %}
这加载了所需要的东西,但由于某种原因,我经历过,有时候工作没有这个... ???
查看您的主应用程序(静态目录所在的位置)是否包含在INSTALLED_APPS中。
使用启用的查找程序搜索文件。默认设置是查看STATICFILES_DIRS中定义的所有位置以及INSTALLED_APPS设置指定的应用程序的“静态”目录。
您可以根据您在本地主机上还是在服务器上运行来设置STATIC_ROOT。要确定这一点,请参阅此post。
您可以将STATIC_ROOT配置重写为:
import sys
if 'runserver' in sys.argv:
STATIC_ROOT = ''
else:
STATIC_ROOT = os.path.join(BASE_DIR, 'static')
STATIC_URL = '/static/'
如果设置DEBUG = FALSE,则需要执行以下步骤
在您的urls.py文件中:添加此行
from django.views.static import serve
url(r'^media/(?P<path>.*)$', serve,{'document_root': settings.MEDIA_ROOT}),
url(r'^static/(?P<path>.*)$', serve,{'document_root': settings.STATIC_ROOT}),
我不得不使用
STATICFILES_DIRS = ( '/home/USERNAME/webapps/django/PROJECT/static/', )
这对我有所帮助。
我尝试了这个模型并且有效。
根据使用shell创建的django项目的设置更改
"django-admin.py startproject xxx"# here xxx is my app name
修改文件夹如下结构加载我们的静态文件在服务器上运行
xxx的结构是:
> .
> |-- manage.py
> |-- templates
> | `-- home.html
> `-- test_project
> |-- __init__.py
> |-- settings.py
> |-- static
> | |-- images
> | | `-- 01.jpg
> | |-- style.css
> |-- urls.py
> `-- wsgi.py
- Settings.py中的修改
import os
INSTALLED_APPS = ( 'xxx',# my app is to be load into it)
STATIC_ROOT = ''
STATIC_URL = '/static/'
PROJECT_DIR = os.path.dirname(__file__)
TEMPLATE_DIRS = ( os.path.join(PROJECT_DIR, '../templates'),)#include this
- urls.py中的修改
from django.conf.urls import patterns, include, url
from django.views.generic import TemplateView
class DirectTemplateView(TemplateView):
extra_context = None
def get_context_data(self, **kwargs):
context = super(self.__class__, self).get_context_data(**kwargs)
if self.extra_context is not None:
for key, value in self.extra_context.items():
if callable(value):
context[key] = value()
else:
context[key] = value
return context
urlpatterns = patterns('',
url(r'^$', DirectTemplateView.as_view(template_name="home.html")), )
- home.html
<html>
<head>
<link href="{{STATIC_URL}}style.css" rel="stylesheet" type="text/css">
</head>
<body>
<h1>This is home for some_app</h1>
<img src="{{STATIC_URL}}/images/01.jpg" width=150px;height=150px; alt="Smiley ">
</body>
</html>
使用Django 1.11.x +,您必须在settings.py
中配置静态文件,
STATIC_URL = '/static/' # the path in url
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
并将其与静态模板标签一起使用,
{% load static %}
<link rel="stylesheet" href="{% static 'css/bootstrap.css' %}">
另一个简单的尝试是停止,然后重新启动服务器,例如
$ python manage.py runserver
我查看了其他答案,但重启服务器对我有用。
将以下代码添加到settings.py
:
STATICFILES_DIRS = [
os.path.join(BASE_DIR, "static"),
]
之后,在项目的根目录中创建静态文件夹。
要在模板上加载静态文件,请使用:
{% load static %}
<img src="{% static "images/index.jpeg" %}" alt="My image"/>
你的settings.py
缺少这些吗?我正在粘贴我项目的一个设置:
TEMPLATE_CONTEXT_PROCESSORS = ("django.contrib.auth.context_processors.auth",
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.core.context_processors.static",
"django.contrib.messages.context_processors.messages")
另外,这就是我在urls.py
中所拥有的:
urlpatterns += patterns('', (
r'^static/(?P<path>.*)$',
'django.views.static.serve',
{'document_root': 'static'}
))
在我当地的环境中,DEBUG = True
为我做了这件事。
这些步骤对我有用,只需看看Load Static Files (CSS, JS, & Images) in Django
我使用Django 1.10。
static
上创建一个文件夹settings.py
,我的settings.py
的路径是~/djcode/mysite/mysite/settings.py
,所以这个目录是~/djcode/mysite/mysite/static/
;static_dirs
创建两个文件夹static_root
和static
,那就是~/djcode/mysite/mysite/static/static_dirs/
和~/djcode/mysite/mysite/static/static_root/
;settings.py
:
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.10/howto/static-files/
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, 'mysite', 'static', 'static_root')
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'mysite', 'static', 'static_dirs'),
)
$ python manage.py collectstatic
;css
中创建一个文件夹static_dirs
并放入你自己的.css
文件中,你的css文件'路径是~/djcode/mysite/mysite/static/static_dirs/css/my_style.css
;<link>
文件中更改.html
标签:<link rel="stylesheet" type="text/css" href="{% static 'css/my_style.css' %}">
,最后这个链接的路径是http://192.168.1.100:8023/static/css/my_style.css
答对了!
添加
PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__))
STATICFILES_DIRS = ( os.path.join(PROJECT_ROOT, "static"), )
并从STATIC_ROOT
删除了settings.py
,它对我有用
在settings.py中添加此"django.core.context_processors.static",
上下文处理器
TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.static",
)