Медиа администратора Django перестали обслуживаться локально - PullRequest
0 голосов
/ 18 октября 2011

Я настроил простой проект, и до определенного момента все работало нормально. Я добавлял в проект материал, пути к статическим каталогам и т. Д., А потом внезапно понял, что перестали обслуживаться административные медиа, нет CSS, нет изображений.

Просмотр источника страницы показывает это:

link rel="stylesheet" type="text/css" href="/static/admin/css/base.css"

Что является правильным и тот же путь работает с любым вновь созданным проектом Django.

По сути, я хотел бы как-нибудь включить, чтобы административный носитель обслуживался из местоположения по умолчанию.

Это settings.py, но, честно говоря, я не сильно изменил его с того момента, когда он перестал работать.

# Absolute path to the directory that holds media.
# Example: "/home/media/media.lawrence.com/"
MEDIA_ROOT = os.path.join(PROJECT_ROOT, "site_media", "media")

# URL that handles the media served from MEDIA_ROOT. Make sure to use a
# trailing slash if there is a path component (optional in other cases).
# Examples: "http://media.lawrence.com", "http://example.com/media/"
MEDIA_URL = "/site_media/media/"

# Absolute path to the directory that holds static files like app media.
# Example: "/home/media/media.lawrence.com/apps/"
STATIC_ROOT = os.path.join(PROJECT_ROOT, "site_media", "static1")

# URL that handles the static files like app media.
# Example: "http://media.lawrence.com"
STATIC_URL = "/site_media/"

# Additional directories which hold static files
STATICFILES_DIRS = [
    os.path.join(PROJECT_ROOT, "site_media"),
    os.path.join(PROJECT_ROOT, "site_media", "static"),
    os.path.join(PROJECT_ROOT, "site_media", "media"),
]

# URL prefix for admin media -- CSS, JavaScript and images. Make sure to use a
# trailing slash.
# Examples: "http://foo.com/media/", "/media/".
ADMIN_MEDIA_PREFIX = '/static/admin/'

# Make this unique, and don't share it with anybody.
SECRET_KEY = '__@9nw29=7gbj8xb5z*u6cew3x8m(&_v&jlp16!^bnpe+6@w0#'

# List of callables that know how to import templates from various sources.
TEMPLATE_LOADERS = (
    'django.template.loaders.filesystem.Loader',
    'django.template.loaders.app_directories.Loader',
#     'django.template.loaders.eggs.Loader',
)

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

ROOT_URLCONF = 'wizs.urls'

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.
    os.path.join(PROJECT_ROOT, "templates"),
)


TEMPLATE_CONTEXT_PROCESSORS = [
    "django.core.context_processors.auth",
    "django.core.context_processors.debug",
    "django.core.context_processors.i18n",
    "django.core.context_processors.media",
    "django.core.context_processors.request",
    "django.contrib.messages.context_processors.messages",
    'django.core.context_processors.static',
]

UPDATE

Похоже, что все сводилось к манипулированию этими двумя свойствами:

1) Теперь я вижу мультимедиа администратора, но НЕ СМИ (например, загруженные изображения)

STATIC_URL = "/site_media/static/"
ADMIN_MEDIA_PREFIX = '/site_media/static/admin/'

2) Теперь я вижу загруженные медиа-файлы, но НЕ администраторские медиа

STATIC_URL = "/site_media/"
ADMIN_MEDIA_PREFIX = '/site_media/static/admin/'

1 Ответ

1 голос
/ 18 октября 2011

Похоже, что STATIC_URL должно быть "/ site_media / static1 /", а ADMIN_MEDIA_PREFIX должно быть "/ site_media / static1 / admin /"

Некоторые другие предложения:

  1. Дон 't скомпилируйте ваш MEDIA_ROOT в свой STATIC_ROOT, поэтому удалите os.path.join(PROJECT_ROOT, "site_media", "media"),
  2. Ваши локальные статические файлы также не должны быть в site_media.поэтому удалите os.path.join(PROJECT_ROOT, "site_media", "static"),, измените его на os.path.join(PROJECT_ROOT, "static"), и переместите туда этот каталог.
  3. Вы должны очистить site_media локально и заполнять его только на сервере.(или, конечно, с любым носителем, который вы загружаете локально).Но вам вообще не нужно запускать collectstatic локально.
  4. Если / как только вы это сделаете, вы можете изменить «static1» обратно на статический, а затем обслуживать всю папку / site_media / через nginx, итогда в этой папке не будет дубликатов.

Удачи.

Вот мои настройки:

# settings.py
MEDIA_ROOT = os.path.join(PROJECT_ROOT, 'site_media', 'media')
MEDIA_URL = '/site_media/media/'

STATIC_ROOT = os.path.join(PROJECT_ROOT, 'site_media', 'static')
STATIC_URL = '/site_media/static/'

ADMIN_MEDIA_PREFIX = '/site_media/static/admin/'

STATICFILES_DIRS = (
    os.path.join(PROJECT_ROOT, 'static'),
)

STATICFILES_FINDERS = (
    'django.contrib.staticfiles.finders.FileSystemFinder',
    'django.contrib.staticfiles.finders.AppDirectoriesFinder',
)

# urls.py
from django.conf import settings

urlpatterns += patterns('',
    url(r'^site_media/static/(?P<path>.*)$', 'django.contrib.staticfiles.views.serve'),
    url(r'^site_media/media/(?P<path>.*)$', 'django.views.static.serve', {
        'document_root': settings.MEDIA_ROOT,
    })
)
...