5

我在 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 中看起来像这样:

半渲染的grappelli

该网站的其他一切运行良好。Django 调试工具栏说(工作的)开发服务器版本和上面的生产版本正在呈现相同的模板。删除 grappelli 后,正常的 django 管理员会正确显示。我尝试从更改我的 Nginx conf 文件

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

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

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

4

4 回答 4

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',
)
于 2013-02-05T21:03:17.570 回答
2

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

于 2013-02-06T12:39:15.967 回答
1

似乎 Django 1.4.3 对其管理静态文件进行了一些更改,而 Grappelli 尚未设法遵循这些更改。我没有花时间检查这是否是模板或静态文件级别本身的问题,但我提供了一种解决方法。

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

于 2013-02-06T08:04:13.453 回答
0

我最好的客人没有看你的 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',
)
于 2013-01-30T19:47:23.227 回答