【问题标题】:Django grappelli seems unable to see all its media filesDjango grappelli 似乎无法查看其所有媒体文件
【发布时间】:2013-01-12 00:14:06
【问题描述】:

我在 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 中都是这样的:

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

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

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

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

【问题讨论】:

  • 我有同样的问题,但我使用的是 django 服务器
  • 这很有趣,因为我的设置在开发服务器上运行良好,所以无论你在开发中没有做什么,我在生产中都没有做!请告诉我你是如何修复它的。
  • 我也有同样的问题。到目前为止,这似乎是一个我还不知道的 Grappelli 问题。

标签: django nginx gunicorn django-grappelli


【解决方案1】:

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

【讨论】:

  • 不,TEMPLATE_DIRS 是一样的。我已经更新了这个问题,至少根据 Django 调试工具栏,相同的模板正在开发和生产中呈现。我正在尝试将 settings.py 的相关部分添加到问题中,但 myOpenID 似乎刚刚关闭,所以我无法使用上面的代码从机器登录。
【解决方案2】:

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

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

【讨论】:

  • 这个答案对我来说最有意义,但建议的解决方法没有奏效(到目前为止,其他建议的答案也没有奏效)。我还没有尝试降级,我会保留它作为最后的选择。
  • 降级 Django 以收集静态数据并不是一个好的选择,但如果你现在想运行 Grappeli,它肯定会完美无缺。不过,暂时删除 Django 的管理员对我有用。
【解决方案3】:

检查静态媒体是否存在。

检查所有这些设置...

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

【讨论】:

    【解决方案4】:

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

    显然您的 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',
    )
    

    【讨论】:

    • 恐怕没有骰子,根据文档,我在管理员面前有 grappelli。
    猜你喜欢
    • 2015-07-18
    • 2022-01-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多