2012-04-18 140 views
12

我是一個Django新手,在我的第一個項目上工作並遇到靜態文件的問題。Django靜態文件將不會加載

我已經使用由兩個模板組成的django.contrib.auth創建了一個簡單的認證系統:mysite/templates/index.htmlmysite/templates/registration/login.html。我有mysite/static全球靜態內容,我希望能夠訪問所有應用程序呈現的所有模板。

mysite/templates/index.html包含<img src="{{ STATIC_URL }}pics03.jpg"/>當我訪問的URL localhost:8000/

mysite/templates/registration/login.html包含<img src="{{ STATIC_URL }}pics03.jpg"/>也呈現爲"static/pics03.jpg",當我訪問的URL "localhost:8000/accounts/login/"

在我的網址不會加載它呈現爲"static/pics03.jpg"和加載罰款。 py我有:

urlpatterns = patterns('', 
    url(r'^$', 'mysite.views.home'), # plays index.html template 
    url(r'^accounts/login/$', 'django.contrib.auth.views.login'), 

在我的settings.py我有:

PROJECT_DIR = os.path.dirname(__file__) 

STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static". 
    # Always use forward slashes, even on Windows. 
    # Don't forget to use absolute paths, not relative paths. 
    os.path.join(PROJECT_DIR,'static'), 
) 

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

STATIC_URL = '/static/' 

STATIC_ROOT = '' 

我是Django的應該尋找在STATICFILES_DIRS全球靜態內容的印象,但即使我在那裏更改URL以一個絕對路徑它沒有找到login.html的靜態內容靜態文件夾。任何人都可以對此有所瞭解嗎?

回答

18

你的問題是,你的arent聽URL「/靜態/」無處在你的urls.py

如果你通過像Apache或nginx的Web服務器爲你的應用程序,那麼這是正常的,因爲Web服務器會處理靜態文件本身。

對於開發Django帶有一個內置的靜態服務器

到urls.py文件,在最後添加

from django.contrib.staticfiles.urls import staticfiles_urlpatterns 
urlpatterns += staticfiles_urlpatterns() 

這樣做是添加/靜態/ URL,讓你爲沒有Web服務器的人提供服務。

這相當於

url(
    regex=r'^static/(?P<path>.*)$', 
    view='django.views.static.serve', 
    kwargs={'document_root': settings.STATIC_ROOT,} 
) 

有些人會告訴你,你需要用一個「如果settings.DEBUG」的URL規則使用DEV-唯一規則,但這個心不是需要在所有,實際上我發現這是一個不好的建議。

+0

是的,這是問題..謝謝! – JimJay 2012-04-28 17:41:34

+0

那麼,實際上在後一種情況下,有必要包裝該規則。如果你看看django的代碼,你會發現這個視圖不會檢查DEBUG。 – 2013-02-25 21:57:16

+2

該視圖從未命中,因爲您的網絡服務器設置爲捕獲這些文件並提供靜態文件,因此不需要檢查。 – krs 2013-04-08 02:31:46

1

你使用的runserver構建或者您服務使用Apache或類似的,當有麻煩?我一直在努力。我按照文檔:當你準備部署https://docs.djangoproject.com/en/dev/howto/static-files/

第二部分是關鍵。您需要定義一個靜態根目錄(該目錄將爲空)並運行manage.py collectstatic命令將整個項目中的靜態文件移動到該文件夾​​中。然後你可以從那裏爲他們服務。

+0

我只是使用runserver目前沒有準備好部署 – JimJay 2012-04-18 20:34:11

0

是否改變STATIC_ROOT=''STATIC_ROOT='/'有幫助?

在我看來,唯一的區別是,static/pics03.jpg(相對路徑)在主頁上存在,但不會對其他。

在兩種情況下都存在絕對路徑/static/pics03.jpg。如果改變STATIC_ROOT沒有幫助,只是增加一個/到網址的開頭。