2016-08-03 92 views
0

我目前生氣Django(1.9)!最可悲的是'靜態URL'是給我的問題。 '媒體網址'工作正常,沒有問題,但靜態網址給了一個巨大的頭痛。Django靜態URL錯誤,無法加載

在我settings_dev.py

import os 
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 
PROJECT_PATH = os.path.abspath(os.path.dirname(__file__)) 
STATIC_ROOT = os.path.join(PROJECT_PATH,'../static/') 
STATIC_URL = '/static/' 

當我添加了以下標籤:

{% load static from staticfiles %} 

    <script type="text/javascript" src="{% static 'datepicker/js/bootstrap-datepicker.js' %}"></script> 

JS文件將不會加載。當我檢查我的源代碼時,它會顯示下面的鏈接。

<script type="text/javascript" src="/static/datepicker/js/bootstrap-datepicker.js"></script> 

,當我點擊它我重定向到

http://127.0.0.1:8000/static/datepicker/js/bootstrap-datepicker.js 

和顯示

Page not found (404) 
    Request Method: GET 
    Request URL: http://127.0.0.1:8000/static/datepicker/js/bootstrap- datepicker.js 

現在,我調整我的urls.py到

if settings_dev.DEBUG: 
    # static files (images, css, javascript, etc.) 
    urlpatterns += patterns('', 
     (r'^media/(?P<path>.*)$', 'django.views.static.serve', { 
    'document_root': settings_dev.MEDIA_ROOT, 'show_indexes': True}), 
     (r'^static/(?P<path>.*)$', 'django.views.static.serve', { 
    'document_root': settings_dev.STATIC_ROOT, 'show_indexes': True}), 
) 

然而,我仍然收到相同的錯誤!頁面未找到問題。

項目目錄

PROJECT NAME: Book/ 

SUB DIRECTORY: 
    media 
    static 
    Template 
    book 
    bookapp 
    manage.py (this is a file) 

我缺少什麼?

+1

首先,您使用的任何其他服務器除了Python的Django開發服務器託管您的web應用程序,像** Apache或NGINX **?也就是說,你使用'python manage.py collectstatic'? –

+0

你也可以向我們展示你的根目錄是什麼樣子的,以便看看static_url是否真的在靜態文件的正確目錄中搜索? –

+0

@AnkushRaghuvanshi我更新了問題 – YoYo

回答

2

好了把事情給你明確的。

STATIC_ROOT是當你想在另一臺服務器上提供你的文件時所有你的靜態數據被收集的目錄,比如APACHE或NGINX,或者可能在Heroku左右。

如果不想只想在本地開發服務器上運行您的Web應用程序,則不需要python manage.py collectstatic,因此您不需要STATIC_ROOT。

所有你需要的是STATIC_URL和萬一你有你的靜態文件在其他位置,那麼你也需要STATICFILES_DIRS = [os.path.join(BASE_DIR, "static"),]

因此,您將在基本目錄級別上有一個名爲`static'的文件夾,其中django將查找您的靜態文件。

如果您爲STATIC_DIRSSTATIC_ROOT指定了相同的文件夾,則會自動出現錯誤。 Django不會允許你這樣做,因爲你在技術上試圖爲了兩個不同的目的提供相同的目錄。

進行了詳細的說明,請參見本 - >Differences between STATICFILES_DIR, STATIC_ROOT and MEDIA_ROOT

+0

謝謝。如果是這樣的話,我的STATIC_ROOT = os.path.join(PROJECT_PATH,'../static /')是正確的。它應該定位它。不需要STATIC_DIRS,因爲我只有一個位置存儲我的靜態文件。此外,我還在開發服務器。 – YoYo

+0

仍然不知道爲什麼Django無法找到我的靜態網址 – YoYo

+0

不..不對。 –

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

這條線是足夠的服務項目static夾中的文件...你必須設置這個在你的urls.py

urlpatterns = [ 
    ... 
] + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 
+0

您是否嘗試過我的解決方案? –

+0

STATIC_ROOT僅用於部署,這意味着生產服務器...請參閱此鏈接... https://docs.djangoproject.com/en/1.10/howto/static-files/#deployment –

+0

我收到此錯誤不正確配置: STATICFILES_DIRS設置不應包含STATIC_ROOT設置 – YoYo