【问题标题】:Django 1.7 - serving CSS static files in developmentDjango 1.7 - 在开发中提供 CSS 静态文件
【发布时间】:2015-08-06 18:17:09
【问题描述】:

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

【问题讨论】:

    标签: django


    【解决方案1】:

    静态 css 资源的路径有一个不需要的斜线。应该是:

    {% static "css/style.css" %}
    

    澄清一下,这个路径应该是相对于你的静态根目录的。添加斜线会导致 Django 尝试加载相对于站点根目录而不是静态根目录的静态文件。

    【讨论】:

      猜你喜欢
      • 2014-12-22
      • 2012-06-04
      • 2014-03-13
      • 2012-12-16
      • 2012-01-26
      • 2013-12-22
      • 2012-03-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多