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

我有一台运行在Ubuntu服务器上的django 1.4和grappelli 2.4.3,这个服务器在生产环境中可以通过Windowsnetworking系统查看。 当我在使用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但pipe理网站显然只是部分呈现。 这绝对是拿起一些CSS,因为一些元素的样式。 但是它并没有吸引别人,因为它看起来很乱。 我的Nginx或Gunicorn错误日志都没有显示任何404s,如果我直接将浏览器指向它们,我可以下载所有的css和js文件。

目前pipe理网站在IE8和IE9中都是这样的:

半渲染的grappelli

关于该网站的其他一切运行良好。 Djangodebugging工具栏表示(工作)开发服务器版本和上面的生产版本呈现相同的模板。 当grappelli被移除时,正常的django admin会正常显示。 我试过改变我的Nginx conf文件

 location /admin/media/ { root /path/to/django/contrib; } 

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

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

在黑暗中的另一个镜头:你偶然有不同的TEMPLATE_DIRS设置在开发和生产? 看截图,这似乎不是一个静态文件的问题。 就像diegueus9已经指出的那样,grappelli css样式似乎被加载,但模板是来自股票的Django管理员。

检查静态媒体是在那里挑衅。

检查所有这些设置…

 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', ) 

似乎Django 1.4.3引入了对Grappelli尚未设法遵循的管理静态文件的一些更改。 我没有花时间检查模板或静态文件级别本身是否是问题,但是我带来了一个解决方法。

你可以将你的Django设置降级到1.4.2,直到它被修复,或者像我一样,暂时禁用INSTALLED_APPS 'django.contrib.admin' (只是注释该行或任何有效的行),运行collectstatic -c然后再次启用管理员。 无论哪种方式,您将在Grappelli部署中拥有正确的样式。

我最好的客人没有看你的settings.py是你的应用程序“grappelli”是 django的管理员之后安装的而不是之前 。 在设置文档中查看该警告

很明显,你的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', )