【问题标题】:djagno admin css is not working after upgrading django to 1.6将 django 升级到 1.6 后,django admin css 无法正常工作
【发布时间】:2014-08-05 06:53:23
【问题描述】:

我有两个 django 应用程序,一个是 django version 1.3.1,另一个是 django 1.2.3,前端和管理部分的 css 文件都可以正常工作。但最近我已将这两个应用程序升级到django 1.6。现在升级前端站点(css)后工作正常,但管理员 css 无法工作/服务,我不知道升级后出了什么问题。可能在 django 最新版本中更改了一些静态服务结构?以下是我的一些设置文件选项

django 应用一设置

SETTINGS_DIR = os.path.dirname(__file__)
DJANGO_PROJ_DIR = os.path.abspath(os.path.join(SETTINGS_DIR, os.path.pardir))
SITE_DIR = os.path.abspath(os.path.join(DJANGO_PROJ_DIR, os.path.pardir))
HOME = DJANGO_PROJ_DIR
STATIC_DOC_ROOT= HOME + '/static/'
MEDIA_ROOT = HOME + '/media'
MEDIA_URL = '/media/'

ADMIN_MEDIA_PREFIX = '/media/'
ADMIN_ROOT = '/admin/'


TEMPLATE_CONTEXT_PROCESSORS = (
'django.contrib.auth.context_processors.auth',
"django.core.context_processors.debug",
"django.core.context_processors.i18n",
"django.core.context_processors.media",
"django.contrib.messages.context_processors.messages",
"django.core.context_processors.request")

# List of callables that know how to import templates from various sources.
if DEBUG:
    TEMPLATE_LOADERS = [
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
    ]
else:
    TEMPLATE_LOADERS = [
        ('django.template.loaders.cached.Loader',(
            'django.template.loaders.filesystem.Loader',
            'django.template.loaders.app_directories.Loader',
            # 'forum.modules.template_loader.module_templates_loader',
            # 'forum.skins.load_template_source',
            )),
    ]

MIDDLEWARE_CLASSES = (
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django_sorting.middleware.SortingMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'pagination.middleware.PaginationMiddleware',
)

TEMPLATE_DIRS = (
    # Put strings here, like "/home/html/django_templates" or "C:/www/django/templates".
    # Always use forward slashes, even on Windows.
    # Don't forget to use absolute paths, not relative paths.
    HOME + '/templates',
)

django 应用二设置

MIDDLEWARE_CLASSES = (                      
    'django.middleware.gzip.GZipMiddleware',
    'django.middleware.cache.UpdateCacheMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.cache.FetchFromCacheMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'pagination.middleware.PaginationMiddleware',
)

TEMPLATE_CONTEXT_PROCESSORS = (
  'django.contrib.auth.context_processors.auth',
  'django.core.context_processors.debug',
  'django.core.context_processors.media',
  'django.core.context_processors.request',
 )

PROJECT_DIR = os.path.dirname(os.path.abspath(__file__))
MEDIA_ROOT = os.path.join(PROJECT_DIR, 'media')

MEDIA_URL = '/media/'

ADMIN_MEDIA_PREFIX = '%s/media/admin/' % MEDIA_URL

TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.load_template_source',
    'django.template.loaders.app_directories.load_template_source',
)

那么有人可以知道如何解决这个问题吗?并让管理员 css 工作?

【问题讨论】:

  • 使用django-admin.py collectstatic

标签: python css django django-admin django-staticfiles


【解决方案1】:

要使静态文件正常工作,需要做一些事情。这取决于你的具体问题是什么。请尝试以下操作:

  1. 查看您的 Web 服务器的错误日志,从您的 Web 服务器的角度了解发生了什么问题。如果错误提示缺少文件,则可能是您的静态文件设置配置错误,或者您可能存在权限问题。

  2. 当您浏览到有问题的应用程序中的页面时,请查看它的源代码,并记下它指向的 url。它指向正确的地方吗?如果没有,那么您的项目或应用程序设置(或模板)有问题。

我的最佳猜测是您的项目设置有问题。看起来您在项目的 settings.py 文件中缺少这些行:

STATIC_URL= '/some/relative/url/' 
STATIC_ROOT = '/path/to/your/project/static/'
STATICFILES_DIRS = ('path/to/your/project/static/',)

第一个确定应该用于引用 css 和其他静态文件(例如在您的应用程序输出的 html 中)的 url,第二个和第三个指定可以在服务器文件系统上找到文件的实际目录.

为此,您的网络服务器必须将STATIC_URL 映射到STATIC_ROOT。如果您使用的是 apache,则需要将以下指令放入 VirtualHost 块中:

Alias    /static/    /path/to/your/project/static/

此外,apache(或者更确切地说,运行 apache 的用户)必须对静态目录具有读取权限!

如果您不熟悉这种静态文件分离,您应该阅读this

您不应该将静态文件(例如 css)物理地放在 STATIC_ROOT 目录中。相反,将它们放在各自应用程序的静态文件夹中。假设你在/path/to/your/app_name/static/css/ 中放了一些css 文件。在您的项目中,运行python manage.py collectstatic,Django 会将css 文件复制到/path/to/your/project/static/app_name/css/。您的STATIC_ROOT 决定了他们的去向。

如果您仍然卡住,请检查您的网络服务器错误日志,并返回您遇到的 django 和/或网络服务器错误。

【讨论】:

    猜你喜欢
    • 2015-05-22
    • 2020-10-10
    • 2019-04-04
    • 2013-07-03
    • 2017-07-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多