2015-08-10 6 views
0

С момента, когда я определил свой MEDIA_ROOT в моих настройках.py. Я не смог получить эскиз сорла для создания папки кэша с изображениями. До этого я не устанавливал MEDIA_ROOT, и он работал нормально.Невозможно получить sorl-thumbnail для работы с MEDIA_ROOT set

Обратите внимание, что я тестирую DEBUG = True.

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

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 

DEBUG = True 
TEMPLATE_DEBUG = DEBUG 

INSTALLED_APPS = (
    'django.contrib.sites', 
    'grappelli', 
    'django.contrib.admin', 
    'django.contrib.auth', 
    'django.contrib.contenttypes', 
    'django.contrib.sessions', 
    'django.contrib.messages', 
    'django.contrib.staticfiles', 
    'djangobower', 
    'pipeline', 
    'sorl.thumbnail', 
    'django_countries', 
    'allauth', 
    'allauth.account', 
    'allauth.socialaccount', 
    # Local apps 
    ... 

STATIC_ROOT = os.path.join(BASE_DIR, 'static') 
STATIC_URL = '/static/' 
STATICFILES_STORAGE = 'pipeline.storage.PipelineStorage' 

MEDIA_ROOT = os.path.join(BASE_DIR, 'media') 
MEDIA_URL = '/media/' 

THUMBNAIL_DEBUG = DEBUG 
THUMBNAIL_PREFIX = 'cache/' 

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

# TODO : use redis in prod 
CACHES = { 
    'default': { 
     'BACKEND': 'django.core.cache.backends.db.DatabaseCache', 
     'LOCATION': 'cache', 
    } 
} 

Мой файл home.html содержит это:

{% extends 'base.html' %} 

{% load static i18n thumbnail %} 

{% static 'main/img/business_man_in_the_mirror.jpg' as business_man_in_the_mirror %} 
{{ business_man_in_the_mirror }} 
{% thumbnail business_man_in_the_mirror|slice:"1:" "x300" as im %} 
    {{ im.url }} 
    <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}" 
     alt="{% trans "Homme d'affaire se regardant dans le miroir" %}" 
     class="center-block img-responsive"> 
{% endthumbnail %} 

{{business_man_in_the_mirror}} печатает "/static/main/img/business_man_in_the_mirror.jpg".

{{im.url}} печатает "/media/cache/d0/38/d038a3e64b2c7d070088e368ee881027.jpg"

До сих пор так хорошо. Но папка кэша в MEDIA_ROOT никогда не создается. MEDIA_ROOT даже имеет 777. Я не вижу ошибок с ./manage.py runserver -v 3. Таким образом, изображение отсутствует на моей веб-странице.

Журнал runserver показывает следующее:

[10/Aug/2015 18:47:47]"GET /media/cache/d0/38/d038a3e64b2c7d070088e368ee881027.jpg HTTP/1.1" 404 2870 

http://localhost:8000/static/main/img/business_man_in_the_mirror.jpg действительно показывает мне изображение.

Я пробовал ./manage.py thumbnail cleanup и ./manage.py thumbnail clear, но это не имело никакого эффекта. Я также попытался удалить таблицу kvstore и таблицу кеша в БД, ничего не изменил. У меня есть 5 строк в кеше, но ничего в таблице kvstore.

Что мне здесь не хватает?

ответ

0

Пожалуйста, обратите внимание на этот вопрос: How to thumbnail static files?. Сначала я этого не видел, но он дает ответ на мою проблему.

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

Обслуживание статических файлов с помощью эскиза sorl не будет работать с abspath для ваших статических изображений. Вместо этого используйте STATIC_URL в своем шаблоне в качестве префикса, используя что-то вроде http://localhost:8000 или www.example.com.

Я не знаю последствий такой практики в производственной среде, но создал локальную папку cache в корне моего проекта Django на местном уровне, что не делает меня счастливым на данный момент. Я решил не использовать миниатюру для моего статического изображения на данный момент.