2016-07-17 70 views
1

當我加載本地站點時,無法加載CSS文件。我正在運行Django 1.9和Python 3.4.2。即使文件路徑看起來正確,Django也不會拉動CSS靜態文件(404錯誤)

這裏是我的結構:

apps/ 
    app1/ 
    app2/ 
    etc. 
clients/ 
    media/ #css, js, images, etc. 
    static/ #static files 
    templates/ #html templates 
__init__.py 
manage.py 
settings.py 
etc. 

在我的settings.py文件我有:

STATIC_ROOT = os.path.join(BASE_DIR, 'clients', 'static') 
STATIC_URL = 'clients/static/' 
STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, 'clients', 'media'), 
] 
MEDIA_ROOT = os.path.join(PROJECT_PATH, 'clients', 'media') 

,這是調用CSS文件,我的HTML模板是這樣:

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

我繼續得到一個404錯誤,說它找不到css文件:/clients/static/css/primary_stylesheet.css

在我的settings.py文件中,我打印出了我的STATICFILES_DIRS和STATIC_ROOT,它們都直接導致它們應該在哪裏。我已經閱讀了文檔,並嘗試了DIRS和ROOT的多種變體,並且不明白爲什麼css文件不能正確拉取 - 即使「collectstatic」正在收集正確。

我非常感謝別人給予的任何幫助和智慧。

謝謝!

+0

確定文件'/客戶/媒體/ CSS/primary_stylesheet。 css'存在嗎?當你運行'collectstatic'時,你是否證實'/ clients/static/css/primary_stylesheet.css'存在? – YPCrumble

+0

請添加您的'STATICFILES_FINDERS'設置。 – YPCrumble

+0

@YPCrumble是的我確定/clients/media/css/primary_stylehseets.css存在。如果我從我的/靜態/文件中刪除CSS文件,然後再次收集靜態文件,則會在/ static/css/ – Tarrant

回答

1

如果你有DEBUG = True設置,那麼Django會不會真正從/static/文件夾拉你的文件 - 它發現並在運行時將收集您的staticfiles當你輸入runserver命令。

我想你會發現,如果你使用的STATICFILES_FINDERS默認設置你的應用程序將能夠滿足您的文件:

STATICFILES_FINDERS = [ 
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
] 
+0

感謝您的回答。我添加了'STATICFILES_FINDERS = [django.contrib.staticfiles.finders.FileSystemFinder]',我的媒體文件仍未加載。我沒有在該數組中添加'... AppDirectoriesFinder',因爲我的印象是它不會影響任何內容,因爲我收集的靜態文件不在應用程序內部。我會嘗試在今天晚上添加它,看看是否有任何變化... – Tarrant

+0

@Tarrant仍然必須是'STATICFILES_FINDERS'和'S'。 – YPCrumble

+0

對不起,拼寫錯誤 - udpated! – Tarrant

1

如果您正在使用python ./manage.py runserver運行您的服務器,您需要設置的網址都staticmedia文件,點擊這裏:https://docs.djangoproject.com/en/1.9/howto/static-files/#serving-static-files-during-development

當我開始一個新項目,我通常把我urls.py這樣的:

from django.conf import settings 
from django.conf.urls.static import static 
from django.conf.urls import url, include 
from django.contrib import admin 

url_patterns = [ 
    url(r'^admin/', admin.site.urls), 
    # your url patterns go here 
] 

if settings.DEBUG: 
    urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
    urlpatterns += static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

這需要你設置STATIC_ROOTSTATIC_URLMEDIA_ROOTMEDIA_URLsettings.py

STATICFILES_DIRS = [ 
    os.path.join(BASE_DIR, 'static_files'), 
] 
STATIC_ROOT = os.path.join(BASE_DIR, 'static') 
STATIC_URL = '/static/' 

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
MEDIA_URL = '/media/' 
+0

我會嘗試包括MEDIA_URL並添加'如果setting.DEBUG:...'今晚,並讓你知道,如果修復了一些事情。 – Tarrant

+0

僅供參考,這並沒有解決這個問題,但無論如何,我很欣賞url的建議! – Tarrant

相關問題