我对Django中的静态文件失去了理智。关于这个问题已经有很多问题了:
This one has a good description of the needed variables
Django Static Tag
Django 1.7 Serving Static Files
当然还有正式的Django文档:Django 1.7 Static Files
但其中许多是关于Django的旧版本,答案和方法有很多种。经过几个小时的阅读和尝试不同的设置,我无法提供css文件。出于某种原因,它只提供图像和js文件。我是css,js和django的新手,所以我不确定自己哪里出错了。
我正在使用Django 1.7和开发服务器。
文件结构:
mysite
mysite/
urls.py
views.py
settings.py
etc
static/
css/
...
stuff
style.css
images/
js/
templates
index.html
settings.py:
STATIC_ROOT = ''
STATIC_URL = '/static/'
STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder',
'django.contrib.staticfiles.finders.AppDirectoriesFinder',
'django.contrib.staticfiles.finders.DefaultStorageFinder',
)
TEMPLATE_DIRS = (
os.path.join(BASE_DIR, 'templates'),
)
STATICFILES_DIRS = (
os.path.join(BASE_DIR, "static"), # where I put my static files
)
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.core.context_processors.request',
"django.core.context_processors.tz",
"django.contrib.messages.context_processors.messages",
]
据我所知,在Django 1.7中,使用runserver时不需要使用STATIC_ROOT
。
urls.py
urlpatterns = patterns('',
# Examples:
# url(r'^$', 'mysite.views.home', name='home'),
# url(r'^blog/', include('blog.urls')),
url(r'^admin/', include(admin.site.urls)),
url(r'^$', 'mysite.views.index', name='index'),
)
来自views.py的相关行:
return render_to_response("index.html", {'some_var': 'foo'}, context_instance=RequestContext(request))
最后,来自index.html:
{% load staticfiles %}
...
<script src="{% static "js/skel.min.js" %}"></script>
<script src="{% static "js/skel-panels.min.js" %}"></script>
<script src="{% static "js/init.js" %}"></script>
<link rel="stylesheet" href="{% static "/css/style.css" %}"/>
除CSS文件外,我的文件似乎都正常提供。页面(我下载的是html / css / js模板)似乎缺少样式,但我可以看到页面上的图像。这是我从运行manage.py runserver获得的:
[25/May/2015 09:23:46] "GET /static/js/skel.min.js HTTP/1.1" 304 0
[25/May/2015 09:23:46] "GET /static/js/skel-panels.min.js HTTP/1.1" 304 0
[25/May/2015 09:23:46] "GET /static/js/init.js HTTP/1.1" 304 0
[25/May/2015 09:23:46] "GET /css/style.css HTTP/1.1" 404 2183
[25/May/2015 09:23:46] "GET /css/style-desktop.css HTTP/1.1" 404 2207
[25/May/2015 09:23:46] "GET /static/images/pic01.jpg HTTP/1.1" 304 0
[25/May/2015 09:23:46] "GET /static/images/pics02.jpg HTTP/1.1" 304 0
我可以看到其他静态文件具有正确的路径。那么为什么只有CSS文件没有/static/
前缀呢?我做错了什么?
答案 0 :(得分:3)
静态css资产的路径有一个不需要的斜杠。它应该是:
session_state
为了澄清,此路径应该相对于您的静态根。预先设置斜杠会导致Django尝试加载相对于站点根目录的静态文件,而不是静态根目录。