2011-09-27 191 views
37

我在本地計算機(Mac OS X)上運行Django的開發服務器(runserver),無法加載CSS文件。Django - 無法獲取靜態CSS文件加載

這裏是settings.py中的相關條目:

STATIC_ROOT = '/Users/username/Projects/mysite/static/' 

STATIC_URL = '/static/' 

STATICFILES_DIRS = (
'/Users/thaymore/Projects/mysite/cal/static', 
) 

STATICFILES_FINDERS = (
'django.contrib.staticfiles.finders.FileSystemFinder', 
'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
#'django.contrib.staticfiles.finders.DefaultStorageFinder', 
) 

INSTALLED_APPS = (
# other apps ... 
'django.contrib.staticfiles', 
) 

在我的views.py我請求上下文:

return render_to_response("cal/main.html",dict(entries=entries),context_instance=RequestContext(request)) 

而在我的模板{{ STATIC_URL }}正確呈現:

<link type="text/css" href="{{ STATIC_URL }}css/main.css" /> 

轉入:

<link type="text/css" href="/static/css/main.css"/> 

這是文件實際所在的位置。我也運行了collectstatic以確保收集所有文件。

我也有我的urls.py下面幾行:

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 

urlpatterns += staticfiles_urlpatterns() 

我是新來的Django所以我可能失去了一些東西簡單 - 希望得到任何幫助。

+1

這爲我工作:https://stackoverflow.com/a/17080877 – dusan

回答

50

請仔細閱讀本: https://docs.djangoproject.com/en/dev/ref/contrib/staticfiles/

在你INSTALLED_APPSsettings.pydjango.contrib.staticfiles

DEBUG=False?如果是這樣,你需要調用runserver--insecure參數:

python manage.py runserver --insecure 

collectstatic對通過開發服務器提供文件服務無關。它用於收集靜態文件在一個位置STATIC_ROOT爲您的Web服務器找到它們。實際上,運行collectstatic並將您的STATIC_ROOT設置爲STATICFILES_DIRS中的路徑是個不錯的主意。您應該仔細檢查以確保您的CSS文件現在存在。

+2

是,'django.contrib.staticfiles'是在INSTALLED_APPS(我上面編輯的問題)和DEBUG = True,我已經開始使用--insecure參數服務器,但沒有運氣。 – tchaymore

+2

嘗試直接加載其中一個靜態URL。它是404還是500? – GDorn

+1

是的,我可以直接導航到css:http://127.0.0.1:8000/static/css/main.css/。裝貨很好。 – tchaymore

3

這些是從您的settings.py缺失嗎?我貼我的項目的設置之一:

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.contrib.messages.context_processors.messages") 

而且,這是我在我的urls.py

urlpatterns += patterns('', (
     r'^static/(?P<path>.*)$', 
     'django.views.static.serve', 
     {'document_root': 'static'} 
)) 
+0

這工作。 django服務器無法通過URL提供服務,無法在本地環境中查找和提供靜態文件。添加這個url模式允許服務器查找並提供生活在項目目錄中的文件。然後,我添加了{{STATIC_URL}}和文件路徑 - 位於我的應用目錄/ static/appname/css/sass文件夾中。實際上,我將其與我在生產中使用的amazon s3一起使用,但需要在本地環境中更改css並在使用collectstatic推送到服務器之前顯示靜態版本。 – IWS

0

您曾在STATICFILES_DIRS和STATIC_ROOT相同的路徑,我碰到了同樣的問題,下面是個例外 -

ImproperlyConfigured:該STATICFILES_DIRS設置不應包含STATIC_ROOT設置

對於本地不這樣做需要STATICFILES_DIRS,因爲無論如何你不需要運行collectstatic。一旦你評論它,它應該工作得很好。

0

你有沒有添加到您的模板:

{% load staticfiles %} 

這將加載所需的內容,但由於某些原因,我已經經歷了,有時沒有這個工作... ???

-1

我試過這個模型,它的工作。

變化設置按照與外殼

"django-admin.py startproject xxx"# here xxx is my app name 

創建的Django項目修改該文件夾下面的結構裝載我們的靜態文件在服務器上運行的XXX

結構是:

>  . 
>  |-- manage.py 
>  |-- templates 
>  | `-- home.html 
>  `-- test_project 
>   |-- __init__.py 
>   |-- settings.py 
>   |-- static 
>   | |-- images 
>   | | `-- 01.jpg 
>   | |-- style.css 
>   |-- urls.py 
>   `-- wsgi.py 

- Settings.py中的修改

import os 
INSTALLED_APPS = ( 'xxx',# my app is to be load into it) 

STATIC_ROOT = '' 
STATIC_URL = '/static/' 
PROJECT_DIR = os.path.dirname(__file__) 
TEMPLATE_DIRS = (  os.path.join(PROJECT_DIR, '../templates'),)#include this 

- 在urls.py修改

from django.conf.urls import patterns, include, url 
from django.views.generic import TemplateView 

class DirectTemplateView(TemplateView): 
    extra_context = None 
    def get_context_data(self, **kwargs): 
     context = super(self.__class__, self).get_context_data(**kwargs) 
     if self.extra_context is not None: 
      for key, value in self.extra_context.items(): 
       if callable(value): 
        context[key] = value() 
       else: 
        context[key] = value 
     return context 

urlpatterns = patterns('', 
    url(r'^$', DirectTemplateView.as_view(template_name="home.html")),) 

- home.html的

<html> 
    <head> 
     <link href="{{STATIC_URL}}style.css" rel="stylesheet" type="text/css"> 
    </head> 
    <body> 
     <h1>This is home for some_app</h1> 
     <img src="{{STATIC_URL}}/images/01.jpg" width=150px;height=150px; alt="Smiley "> 
    </body> 
</html> 
0

DEBUG = True在我的本地設置爲我做。

+2

如果我們需要在生產環境中運行服務器,該怎麼辦? – Viktor

+0

然後你想要使用'DEBUG = False' – AdamY

-1

我不得不使用

STATICFILES_DIRS = ('/home/USERNAME/webapps/django/PROJECT/static/',) 

,幫助我。

+1

硬編碼鏈接是一個不好的做法 – Viktor

0

查看您的主應用程序(靜態目錄所在的位置)是否包含在您的INSTALLED_APPS中。

通過使用啓用的查找程序來搜索文件。默認值是查找STATICFILES_DIRS中定義的所有位置以及INSTALLED_APPS設置指定的應用程序的「靜態」目錄中。

2

添加

PROJECT_ROOT = os.path.normpath(os.path.dirname(__file__)) 
STATICFILES_DIRS = (os.path.join(PROJECT_ROOT, "static"),) 

settings.py刪除STATIC_ROOT,它爲我

5

另一個簡單的事情是嘗試停止,然後例如重新啓動服務器

$ python manage.py runserver 

我看着其他答案,但重新啓動服務器爲我工作。

+0

'$ python manage.py runserver --insecure'適用於我的本地服務器和Google App Engine –

2

這些步驟的工作對我來說,只是看到Load Static Files (CSS, JS, & Images) in Django

我使用Django 1.10。

  1. 上的settings.py同一水平創建一個文件夾static,我settings.py的路徑是~/djcode/mysite/mysite/settings.py,所以這dir是~/djcode/mysite/mysite/static/;
  2. 創建兩個文件夾static_dirsstatic_root in static,即~/djcode/mysite/mysite/static/static_dirs/~/djcode/mysite/mysite/static/static_root/;
  3. settings.py這樣的:

    # Static files (CSS, JavaScript, Images) 
    
    # https://docs.djangoproject.com/en/1.10/howto/static-files/ 
    
    STATIC_URL = '/static/' 
    
    STATIC_ROOT = os.path.join(BASE_DIR, 'mysite', 'static', 'static_root') 
    
    STATICFILES_DIRS = (
        os.path.join(BASE_DIR, 'mysite', 'static', 'static_dirs'), 
    ) 
    
  4. 殼做這個命令$ python manage.py collectstatic;

  5. static_dirs創建一個文件夾css並投入自己.css文件,你的CSS文件」路徑是~/djcode/mysite/mysite/static/static_dirs/css/my_style.css;

  6. 變化<link>標籤在.html文件:<link rel="stylesheet" type="text/css" href="{% static 'css/my_style.css' %}">

最後這個環節的路徑是http://192.168.1.100:8023/static/css/my_style.css

賓果!

1

添加此"django.core.context_processors.static",背景處理器在您的settings.py

TEMPLATE_CONTEXT_PROCESSORS = (
"django.core.context_processors.static", 

4

使用Django 1.11.x +,你必須在settings.py作爲配置靜態文件,

STATIC_URL = '/static/' # the path in url 

STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, "static"), 
] 

和與靜態模板標籤一起使用,

{% load static %} 
<link rel="stylesheet" href="{% static 'css/bootstrap.css' %}"> 
+0

爲我工作! +1 –

+0

這個答案幫我弄明白了 –

2

下面的代碼添加到您的settings.py

STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, "static"), 
] 

之後,在項目的根目錄下創建靜態文件夾。

要加載的模板的靜態文件使用:

{% load static %} 
    <img src="{% static "images/index.jpeg" %}" alt="My image"/>