Django 1.7 - 在开发中提供CSS静态文件

时间:2015-05-25 09:44:50

标签: django

我对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/前缀呢?我做错了什么?

1 个答案:

答案 0 :(得分:3)

静态css资产的路径有一个不需要的斜杠。它应该是:

session_state

为了澄清,此路径应该相对于您的静态根。预先设置斜杠会导致Django尝试加载相对于站点根目录的静态文件,而不是静态根目录。