2012-06-05 65 views
0

我一直想知道當使用Django時,服務器如何找到靜態文件。最近我將我的Django應用程序部署到服務器,並且在部署靜態文件時遇到問題。我總是得到錯誤如下:使用Django部署靜態文件modpython

Using the URLconf defined in cms.urls, Django tried these URL patterns, in this order: 
^gre/ 
The current URL, static/, didn't match any of these. 

當我問這樣http://gnijuohz.com/static/css/bootstrap.css

我的CSS文件,以便1)

我必須做一些與我的urls.py,使其可以找到我的CSS文件和JS文件?

請注意,我沒有服務器上的root權限,所以我不能使用Django提供的collectstatic命令。

我在我的setting.py中設置了STATIC_ROOT和STATIC_URL,以便STATIC_ROOT指向我的靜態文件。

2)

我不清楚整個過程是如何工作的。當我請求我的css文件時,是否會通過urls.py查看匹配項?

感謝您的幫助!

+0

類似:http://stackoverflow.com/questions/10460028/confusion-in-django-admin-static-and-media-files/10460116#10460116 –

+1

@ArgsKwargs並非如此。我不能運行命令'./manage.py collectstatic' – Gnijuohz

+0

誰說你必須,它解釋了生產和開發環境... –

回答

1

1.

不,Django不應該在生產服務器上提供靜態文件。 Apache(或者你使用的任何服務器)應該爲靜態文件提供服務,通常位於/ static /目錄中。這就是collectstatic所做的:它收集所有Django應用程序的所有靜態文件,並將它們放入STATIC_ROOT,以便您的服務器可以提供這些文件。

在本地,您可以通過調整中的urlpatterns來提供靜態文件。

很遺憾,您不能使用collectstatic,因爲這是如何使用Django的。

2.

如上所述,這不是應該發生的。

現在,要回答您的問題,您可以在您的STATIC_ROOT中爲靜態文件所在的所有位置創建符號鏈接。因此,每個Django應用程序的每個靜態目錄都有一個符號鏈接。

+0

我無法手動將所有文件添加到/ static /文件? – Gnijuohz

+0

如果可行的話,這是可能的。但是您可能希望將其自動化,因此您可以在將代碼上傳到服務器之前編寫一個本地收集靜態文件的腳本。最終結果將是相同的:只要服務器可以找到靜態文件,就可以從該目錄提供服務。 –