2014-10-27 114 views
0

我正在关注official documentation以便为静态文件提供服务,但我在开发控制台中收到错误404。我使用的是'django.contrib.staticfiles',所以应该自动提供静态文件。这是我的设置:Django 1.7 - 提供静态文件

设置:

STATIC_ROOT = '' 
STATIC_URL = '/static/' 

模板头:

{% load staticfiles %} 
<link rel="stylesheet" href="{% static "css/app.css" %}"> 

目录树:

django_project 
    \apps 
    \static 
     \css 
      app.css 
    \templates 
     index.html 

我可以在Firefox控制台看到小路到我的文件是正确的:

enter image description here

所以问题一定是Django没有提供静态文件。我找不到我想要的东西。任何建议都是值得欢迎的。

+0

我认为代码有一个拼写错误:“{%static”css/app.css“%}”',你应该用单引号替换一对双引号。 – jeff 2015-04-13 18:54:49

回答

5

SOLUTION: 我错过了这条线在我的settings.py

STATICFILES_DIRS = (os.path.join(os.path.dirname(__file__),'static'),) 

它看起来是强制性的,与TEMPLATE_DIRS相同。

+0

我也尝试过使用STATIC_ROOT,但在此版本的Django中已弃用,所以只需要STATIC_URL,STATICFILES_DIRS和DEBUG = True。 – zen11625 2015-02-28 17:45:24

0

当您运行collectstatic时,它会将所有静态内容放入由STATIC_ROOT指定的路径中。检查deploy to production docs

如果您使用的是django服务器,请尝试检查由{%static%}生成的路径...您可能有一些尾部斜线或缺少某些内容。

检查您是否有following all the requirements。你需要在你安装的应用程序django.contrib.staticfiles像这样的东西在你的主文件网址:

from django.conf import settings 
from django.conf.urls.static import static 

urlpatterns = patterns('', 
    # ... the rest of your URLconf goes here ... 
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
0

这应该工作从settings.py context_processors的:)

settings.py

STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'project', "static"), 
) 

例如:安装的应用程序

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", 
) 

例如在settings.py:

INSTALLED_APPS = (
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
) 

urls.py:

from django.conf import settings 
from django.conf.urls.static import static 
if settings.DEBUG: 
    urlpatterns + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
+2

实际上,您需要在1.7中为静态文件提供的唯一东西是STATIC_URL,STATICFILES_DIRS和'django.contrib.staticfiles'。然后,您只需要在模板中使用任何静态文件,如{%static“css/app.css”%}。所以你不需要像在以前的版本中那样显式地在urls.py中提供静态文件。 – 2014-10-28 04:27:41

0

对于任何运行的Django-CMS和经历404错误(特别是,所有的静态文件都具有“EN-US”前置到URL),我发现下面的步骤来帮助。

首先,关闭您的网址中模式匹配的国际化。PY文件,as described here

urlpatterns = i18n_patterns('', 
     url(r'^admin/', include(admin.site.urls)), 
     url(r'^', include('cms.urls')), 
) 

应改为:

from django.conf.urls import patterns 

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^', include('cms.urls')), 
) 

进口是非常重要的,因为Django的CMS的配置去除django.conf.urlspatterns进口。

这解决了重定向,但它仍然没有找到我的静态文件。我需要手动添加静态url到url模式,如下所示:

urlpatterns = patterns('', 
    url(r'^admin/', include(admin.site.urls)), 
    url(r'^', include('cms.urls')), 
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

之后,静态文件按预期工作。

我敢肯定,这可能与我把我的配置搞乱了,作为一个完全的新手到Django。但是因为其他人可能会遇到同样的问题,所以我把它作为一个可能的,如果不是理想的解决方案。