2014-09-24 130 views
0

我無法讓Django 1.6提供靜態文件。無法提供靜態文件,Django 1.6

在我的settings.py我:

DEBUG = True 

#... 

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

STATIC_URL = '/static/' 
STATIC_ROOT = '/home/it/static/' 
STATIC_DIRS = (
    os.path.join(BASE_DIR, '../static'), 
) 
STATIC_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder', 
    'django.contrib.staticfiles.finders.AppDirectoriesFinder', 
) 

我還增加了以下我的urls.py:

urlpatterns = patterns('', 
    #... 
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

有問題的HTML文件有以下幾點:

{% load staticfiles %} 
#... 
<link rel='stylesheet' type='text/css' href='{% static "css/base.css" %}' /> 

項目樹的相關部分如下所示:

/media/extra/django/ 
├── it 
│ ├── it 
│ │ ├── __init__.py 
│ │ ├── settings.py 
│ │ ├── urls.py 
│ │ ├── wsgi.py 
│ ├── jobs 
│ │ ├── admin.py 
│ │ ├── __init__.py 
│ │ ├── models.py 
│ │ ├── static 
│ │ │ └── jobs 
│ │ ├── tests.py 
│ │ ├── urls.py 
│ │ ├── views.py 
│ ├── manage.py 
├── static 
│ ├── css 
│ │ ├── base.css 
│ │ └── colours.css 
│ ├── images 
│ │ └── favicon.ico 
│ └── scripts 
│  └── base.js 
└── templates 
    ├── it 
    │ ├── base.html 
    │ └── index.html 
    ├── jobs 
    │ └── index.html 
    ├── site_base.html 

我曾嘗試將靜態目錄作爲'it'目錄的同級(並更改STATIC_DIRS變量)。我曾嘗試在urlpatterns上使用+ = staticfiles_urlpatterns()。我曾嘗試將完整路徑添加到STATIC_DIRS。

我也看了這些相關主題: static files in django 1.6 not found Can't get Django to serve static files Django 1.6.2 will not serve static content

非常感謝

+0

設置爲'DEBUG',不'Debug'。如果DEBUG不爲True,Django將不會提供靜態內容。 – 2014-09-24 14:59:43

+0

我沒有看到設置中沒有STATIC_ROOT,但是你在調用它,在你的urls.py – drabo2005 2014-09-24 15:02:14

+0

@DanielRoseman錯字,它是調試文件'DEBUG' – bcvery1 2014-09-24 15:04:04

回答

0

你不應該服務通過Web框架靜態內容,這對網絡服務器的作業(阿帕奇或nginx爲例)

如果你在你的settings.py文件中有STATIC_URL = '/static/',你可以把"{{ STATIC_URL }}css/base.css"放在你的模板中,例如web服務器靜態地服務於/static/,完全繞過django。

+1

這僅用於開發:https://docs.djangoproject.com/en/1.6/howto/static -files/ – bcvery1 2014-09-24 15:09:03

+0

@ bcvery1好的 - 我錯過了:) – GP89 2014-09-24 15:10:11

0

在你的urls.py試圖告訴Django標準視圖通過改變 的URL模式

urlpatterns = patterns('', 
    #... 
) + static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 

With the following: 

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


In the settings.py add: 

import os.path 
STATIC_ROOT ='only_the_path_to_the_project' 
STATICFILES_DIRS = (
    os.path.join(os.path.dirname(__file__),'staticcc').replace('\\','/'), 
) 
+0

這幾乎就是靜態函數所做的那個已經存在的地方 – GP89 2014-09-24 15:20:46

+0

@ drabo2005沒有變化 – bcvery1 2014-09-24 15:22:21

+0

可能是BASE_DIRS路徑的問題,你的意思是STATICFILES_DIRS是由STATIC_DIRS – drabo2005 2014-09-24 15:30:28

1

我不知道什麼是錯的您的設置,以滿足您的靜態文件,但這是設置,爲我工作:

settings.py

STATIC_URL = '/static/' 
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, '../static'), 
    ) 

我還沒有定義STATIC_ROOT或爲static C_FINDERS,所以它使用默認值。我沒有什麼特別的urls.py靜態文件,只有一行媒體:

urls.py

urlpatterns = patterns('', 
    #... 
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT) 

靜態標籤正在從模板罰款,所以我相信你行urls.py不是絕對需要的。

0

在發展
在你的應用程序文件夾中創建的文件夾名稱「靜態」和保存您的圖片是文件夾中。
要使用圖片使用:

<html> 
    <head> 
     {% load staticfiles %} <!-- Prepare django to load static files --> 
    </head> 
    <body> 
     <img src={% static "image.jpg" %}> 
    </body> 
</html> 

在生產中:
一切都同樣喜歡在開發中,只需添加對夫婦更參數Django的:
1.加入settings.py
STATIC_ROOT = os.path.join(BASE_DIR, "static/")(這將準備存儲所有應用程序的靜態文件的文件夾)
2.確保您的應用程序在INSTALLED_APPS = ['myapp',]
3.在終端運行命令py thon manage.py collectstatic(這將使包含在INSTALLED_APPS中的所有應用程序的靜態文件複製到全局靜態文件夾--STATIC_ROOT文件夾)

這就是所有Django需要的,在此之後,您需要進行一些Web服務器端設置使用靜態文件夾的權限。例如。在apache2的配置文件httpd.conf(對於windows)或sites-enabled/000-default.conf。(下網站虛擬主機部分用於Linux)地址:

Alias \static "path_to_your_project\static" 

<Directory "path_to_your_project\static"> 
    Require all granted 
</Directory> 



而這一切