Django grappelli似乎无法看到它的所有媒体文件

时间:2013-01-28 15:47:51

标签: django nginx gunicorn django-grappelli

我在Ubuntu服务器上运行django 1.4和grappelli 2.4.3,我正在生产时通过Windows网络系统查看。当我在使用RDP的Ubuntu机器上查看它时,在开发服务器上一切正常。

settings.py的相关部分是:

STATIC_ROOT = os.path.join(os.path.dirname(__file__), '../03_static_files/collected/')
STATIC_URL = '/static/'
STATICFILES_DIRS = (
    # Put strings here, like "/home/html/static" or "C:/www/django/static".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    os.path.join(os.path.dirname(__file__), '../03_static_files/'),
    os.path.join(os.path.dirname(__file__), '../03_static_files/admin/'),
    os.path.join(os.path.dirname(__file__), '../03_static_files/filebrowser/'),
    os.path.join(os.path.dirname(__file__), '../03_static_files/grappelli/'),
)
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
#    'django.contrib.staticfiles.finders.DefaultStorageFinder',
)

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',

    # apps I added but didn't create
    'south',
    'grappelli',
    'filebrowser',
    'tinymce',
    'haystack',
    'gunicorn',
    'debug_toolbar',
    'taggit',

    # Uncomment the next line to enable the admin:
    'django.contrib.admin',
    # Uncomment the next line to enable admin documentation:
    'django.contrib.admindocs',

    # apps I created
    'community',
    'fts',
    'guidance',
    'news',
)

我已经运行collectstatic,但管理网站显然只是部分呈现。它肯定会拿起一些CSS,因为有些元素是样式化的。但它并没有吸引其他人,因为它看起来很混乱。我的Nginx或Gunicorn错误日志都没有显示任何404,如果我直接将浏览器指向它们,我可以下载所有的css和js文件。

管理站点目前在IE8和IE9中都是这样的:

half-rendered grappelli

该网站的其他所有内容都运行良好。 Django调试工具栏说(工作)开发服务器版本和上面的生产版本呈现相同的模板。删除grappelli时,正常的django admin会正常显示。我试过从

更改我的Nginx配置文件
location /admin/media/ {
    root /path/to/django/contrib;
}

location /admin/media/ {
    root /path/to/grappelli;
}

没有变化。谁能告诉我哪里出错了?

4 个答案:

答案 0 :(得分:2)

在那里检查静态媒体。

检查所有这些设置......

STATIC_URL = '/static/' 
STATIC_ROOT is something like os.path.join(PROJECT_PATH, "static"),
ADMIN_MEDIA_PREFIX = '/static/grappelli/' (or whatever your static directory is)

接下来检查你的

DEBUG = False or True ?
TEMPLATE_DEBUG = DEBUG

如果为false,它将使用nginx提供文件,而不会

另一个例子......

STATIC_URL = '/static/'
STATIC_ROOT = '/home/foo/devel/static'
MEDIA_URL = '/media/'
MEDIA_ROOT = '/home/foo/devel/media'
# the following is deprecated but is it seems grappelly requires it
ADMIN_MEDIA_PREFIX = STATIC_URL + "grappelli/"
STATIC_FILES = ()
STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

答案 1 :(得分:2)

黑暗中的另一个镜头:您是否偶然在开发和制作中有TEMPLATE_DIRS个不同的设置?查看屏幕截图,这似乎不是静态文件的问题。就像diegueus9已经指出的那样,grappelli css样式似乎已经加载了,但模板是来自Django admin的库存。

答案 2 :(得分:1)

似乎Django 1.4.3对他们的管理静态文件进行了一些更改,而Grappelli还没有遵循这些更改。我没有花时间检查模板或静态文件级别本身是否存在问题,但我找到了解决方法。

您可以将Django设置降级到1.4.2直到修复它们,或者像我一样,暂时禁用'django.contrib.admin'中的INSTALLED_APPS(只需将该行或任何内容评为有效),运行collectstatic -c然后再次启用admin。无论哪种方式,Grappelli部署都会有正确的样式。

答案 3 :(得分:0)

我没有看你的settings.py的最好的客人是你的应用程序“grappelli”在 django的管理员之后安装而不是之前的。在setup doc

中查看该警告

显然你的css和js是正确的,但是因为你的应用程序正在呈现django.contrib.admin的模板而没有很好地渲染。

请确保将grappelli放在:

之前
INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'grappelli',
    'django.contrib.admin',
)