Django + Zinnia: не удается получить изображение для иллюстрации записи

Я использую Django (1.7.3) с блогом zinnia (0.15.1), и у меня возникла проблема с рендерингом «изображения для иллюстрации», которое вы можете добавить для записи в блоге.

У меня есть следующие файлы urls.py:

Конфигурация моего верхнего каталога

# -*- coding: utf-8 -*-
from django.conf.urls import patterns, include, url
from django.contrib import admin

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^ecv/', include('extended_cv.urls',namespace="ecv")),
    url(r'^weblog/', include('zinnia.urls', namespace='zinnia')),
    url(r'^comments/', include('django_comments.urls')),
)

Файл settings.py:

# -*- coding: utf-8 -*-
** Snip**
# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True
TEMPLATE_DEBUG = True

# For using django.contrib.sites
SITE_ID = 2
# Application definition
INSTALLED_APPS = (
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'pro',
    'extended_cv',
    'zinnia', # Added for zinnia blog usage
    'django.contrib.sites',# Added for zinnia blog usage
    'django_comments',# Added for zinnia blog usage
    'mptt',# Added for zinnia blog usage
    'tagging',# Added for zinnia blog usage
)

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

TEMPLATE_CONTEXT_PROCESSORS = ( 
    'django.contrib.auth.context_processors.auth', 
    'django.core.context_processors.i18n',
    'django.core.context_processors.request', 
    'zinnia.context_processors.version',  
)
** Snip**
USE_I18N = True
USE_L10N = True
USE_TZ = True
STATIC_URL = '/static/'

Когда я создаю запись для zinnia с помощью пользовательского интерфейса администратора и добавляю изображение, ошибок не появляется, и новая запись сохраняется в базе данных без предупреждения. Затем изображение появится в файле дерева сервера по адресу TopDir/upload/zinnia/date/of/publication/index_IKd2N0d.jpeg.

Но когда я читаю новую запись из приложения блога, я правильно вижу новую запись, но не изображение. Более того, сервер выдал следующую ошибку: GET /weblog/2015/01/18/1st-entry/uploads/zinnia/2015/01/18/index_IKd2N0d.jpeg HTTP/1.1" 404 8922

Я предполагаю, что проблема довольно сложна для отладки, поэтому, если вам нужна дополнительная информация, я буду рад предоставить вам больше.

Спасибо.


person Matt    schedule 18.01.2015    source источник
comment
Каково значение MEDIA_URL?   -  person Daniel Roseman    schedule 18.01.2015
comment
Привет @DanielRoseman, спасибо за ваш интерес к этому вопросу, я не менял значение MEDIA_URL, поэтому я предполагаю, что его значение является значением по умолчанию: '' (пустая строка) в соответствии с документом. Как вы думаете, изменение этого значения поможет?   -  person Matt    schedule 18.01.2015
comment
Что ж, вам нужно установить его на URL-адрес, который обслуживает ваши медиафайлы. Но, конечно, вам действительно нужно что-то настроить для обслуживания ваших медиафайлов в первую очередь. См. документацию. .   -  person Daniel Roseman    schedule 18.01.2015
comment
Спасибо за этот совет, я посмотрю, как правильно управлять медиафайлами.   -  person Matt    schedule 19.01.2015


Ответы (1)


Как объясняет Дэниел Роузман в комментариях, ответ состоит в определении переменных MEDIA_URL и MEDIA_ROOT и перезаписи верхнего файла urls.py, как описано в https://docs.djangoproject.com/en/1.7./howto/static-files/#serving-files,загруженныепользователемвовремяразработки:

urlpatterns = patterns('',
    url(r'^admin/', include(admin.site.urls)),
    url(r'^ecv/', include('extended_cv.urls',namespace="ecv")),
    url(r'^weblog/', include('zinnia.urls', namespace='zinnia')),
    url(r'^comments/', include('django_comments.urls')),
) + static(settings.MEDIA_URL, document_root=settings.MEDIA_ROOT)

И работа сделана.

person Matt    schedule 18.01.2015