2012-07-18 30 views
2

這對我對staticsettings.py settings.py:的Django與./manager的runserver效果很好,而Django的+ uwsgi返回404

STATIC_ROOT = '/home/coat/www/site/app/static/' 
STATIC_URL = '/static/' 
STATICFILES_DIRS = (
"/usr/lib/python2.6/site-packages/django/contrib/admin/static/", 
# This is Django admin default static files 
) 

我的用戶Django的服務器:

./manager runserver

然後我打開網址:http://localhost:8000/static/admin/css/base.css

它非常好。

但開放http://localhost/static/admin/css/base.css

它打印 '404'

enter image description here

我有重啓Nginx的和uwsgi了很多次,但這麼想的工作。

+0

後nginx的配置爲這個網站PLS – jpic 2012-07-18 10:42:19

回答

6

第一件事,這是NONONO

STATIC_ROOT = '/home/coat/www/site/app/static/' 

決不硬編碼絕對路徑,你只是讓你的設置文件移植性較差,可能殺死小貓。適應你的需求:

import os.path 
import posixpath 

PROJECT_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), '..') 

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'static') 

# fix STATICFILES_DIRS too 

現在,你的問題。 django.contrib.staticfiles很棒,但起初可能有點混亂。

  1. 必須瞭解collectstatic command

    收集靜態文件到STATIC_ROOT。 [...]使用啓用的查找器搜索文件。默認值是查找STATICFILES_DIRS中定義的所有位置以及INSTALLED_APPS設置指定的應用程序的「靜態」目錄中。

  2. 用的runserver,staticfiles自動送達,但在生產模式(DEBUG =像Nginx的虛假,真正的HTTP服務器),你應該運行collectstatic(重新)建立STATIC_ROOT

  3. STATIC_ROOT:是HTTP服務器應該提供靜態文件的根路徑

  4. STATIC_URL:HTTP服務器應爲靜態文件提供服務的根URL

  5. STATICFILES_DIRS:除了每個應用程序的「靜態」子目錄外,其他靜態目錄。由於django.contrib.admin是帶有「靜態」文件夾的普通應用程序,因此無需在設置中指定它。

結論:如果STATIC_ROOT解析爲/home/coat/www/site/app/static/,並STATIC_URL是/static/,那麼你應該:

  1. 運行collectstatic管理命令

  2. 配置Nginx的服務/home/coat/www/site/app/static//static/,即:

    location ^~ /static/ { 
        alias /home/coat/www/site/app/static/; 
    } 
    
  3. 刷新nginx的

0

在開發中,runserver命令會爲您的靜態文件提供一些神奇功能。在生產中,您需要配置NGinx來執行此操作。有兩章Django文檔,我建議你閱讀:

  1. Serving static files in production
  2. Serving files (Deployment)

尤其是最後一個環節,說明如何必須配置您的Nginx提供給您的靜態文件。第一