2013-11-01 26 views
0

我注意到staticfiles不會將管理員的靜態文件複製到STATIC_ROOT。我在印象之下(並且我現在找不到這個參考),一旦你包含django.contrib.staticfiles到你的INSTALLED_APPS,它會自動複製管理員的靜態文件(以及所有其他文件)。但是,似乎並非如此。Django.staticfiles不收集管理文件

從上瀏覽了十幾個相關的問題,所以它似乎接受的方式是包括硬編碼的路徑你virtualenv「d管理路徑到你的NGINX,such as here

location /static/admin { 
    root /webapps/hello_django/lib/python2.7/site-packages/django/contrib/admin/; 
} 

然而,這似乎比較髒對我來說。

我還要提到的發現者是爲我工作,即

$ ./manage.py findstatic admin 
    Found 'admin' here: 
    /<path to venv>/lib/python2.7/site-packages/django/contrib/admin/static/admin 

我失去了一些東西在這裏?

+0

'collectstatic'應該收集'admin'內容並將其放置在'STATIC_ROOT'(而不是'STATIC_URL',如您所述)。當你運行'collectstatic'時,你在'STATIC_ROOT'下看到了什麼內容? – AndrewS

+0

你的INSTALLED_APPS列表中是否有'django.contrib.admin'條目?根據文檔https://docs.djangoproject.com/en/dev/ref/settings/#static-files當您運行collectstatic時,django會將所有應用程序的靜態文件拖放到STATIC_ROOT目錄中。 另外,請確保您的django安裝中包含django/contrib/admin/static路徑以防萬一。 – Gaurav

回答

0

原來有一個微妙的問題,我settings.py分裂法。對於任何人來到這裏,從谷歌,我下面就分裂settings.pydeploydjango.com的和戰略,但是ROOT_DIR正在在項目定義的,即下面的結構

$ tree -L 2 
. 
├── static 
├── apps 
└── project 
    ├── __init__.py 
    ├── settings 
    │   ├── __init__.py 
    │   ├── base.py 
    │   ├── dev.py 
    │   └── prod.py 
    ├── urls.py 
    └── wsgi.py 

以下設置的

STATICFILES_DIRS = (
    ABS_PATH('apps', 'example_app', 'static'), 
) 

將導致ROOT_DIR被設置爲project/。由於ABS_PATH函數定義了基於ROOT_DIR的路徑,因此apps/文件夾不可見(應該以'..'開頭)。

解決的辦法當然是將文件夾中的apps/文件夾移動,這很有意義。即正確的結構如下:

$ tree -L 2 
. 
├── static 
└── project_name 
    ├── __init__.py 
    ├── apps    # <-- apps moved here 
    │   └── example_app 
    ├── settings 
    │   ├── __init__.py 
    │   ├── base.py 
    │   ├── dev.py 
    │   └── prod.py 
    ├── urls.py 
    └── wsgi.py 

我意識到這個問題是非常依賴於我在做事情的方式,然而,由於這種結構可以被一些人看作是「最佳實踐」(雖然some disagree),我希望這可以幫助別人!

1

檢查您的所有設置是否在您的settings.py中設置。 我想你的靜態文件在static目錄下的項目根目錄下。

import os 
import sys 

STATIC_ROOT = os.path.join(os.path.dirname(os.path.abspath(__file__)), 'static/') 
STATIC_URL = '/static/' 
ADMIN_MEDIA_PREFIX = '/static/admin/' 

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

INSTALLED_APPS = (
# default apps 
'django.contrib.staticfiles', 
# etc 
) 
STATICFILES_DIRS =() 

nginx的配置:

location /static { 
     alias /path_to_your_project/static; 
     access_log off; 
     expires  max; 
} 
+0

我在1.5版本,並且在'ADMIN_MEDIA_PREFIX' [已棄用](https://docs.djangoproject。com/en/dev/releases/1.4 /#django-contrib-admin)。 – gregoltsov

+0

本示例適用於Django 1.2,來自活動服務器。 – nickzam

+0

感謝您的評論以及工作配置的示例,但問題原因主要是由於我剛接觸Django。我添加了我的答案,解釋了問題所在。無論如何,請有一個upvote! – gregoltsov