Django.staticfiles不收集管理员文件

时间:2013-11-01 23:15:10

标签: django nginx django-admin django-staticfiles django-static

我注意到staticfiles没有将管理员的静态文件复制到STATIC_ROOT。我的印象(我现在无法找到参考资料),一旦您将django.contrib.staticfiles包含在INSTALLED_APPS中,它就会自动复制管理员的静态文件(以及所有其他文件) )。但是,似乎并非如此。

通过浏览十几个相关问题,似乎可以接受的方法是将您的virtualenv管理路径的硬编码路径包含在您的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

我在这里错过了什么吗?

2 个答案:

答案 0 :(得分:1)

检查settings.py中是否设置了所有设置。 我想您的静态文件位于项目根文件夹中的static dir下。

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 config:

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

答案 1 :(得分:0)

原来我的settings.py拆分方法存在一个微妙的问题。对于来自Google的任何人,我都在关注deploydjango.com以及有关分割settings.py的策略,但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/文件夹移到project/文件夹中,这是有道理的。即正确的结构如下:

$ 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),我希望这有助于某人!