2014-10-27 152 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。但是因爲其他人可能會遇到同樣的問題,所以我把它作爲一個可能的,如果不是理想的解決方案。