Сорл-миниатюра плохих URL - PullRequest
5 голосов
/ 31 мая 2011

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

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

Создается изображение, подобное следующему:

<img src="cache/e5/25/e5253a328b9130ecd7d820893f44b0e6.jpg" width="100" height="100">

Как "cache / ..." преобразуется в запрос на изображение?Эти запросы относятся к моему приложению, а не к sorl-thumbnail:

[31/May/2011 07:13:05] "GET /myapp/cache/e5/25/cache/e5/25/cache/00/73/0073095ee4b968b45386ef3fec4f389c.jpg HTTP/1.1" 200 1004

Вот соответствующие строки в settings.py:

INSTALLED_APPS = (
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.sites',
    'django.contrib.messages',
    # Uncomment the next line to enable the  admin:                                          
    'django.contrib.admin',
    'mysite.myapp',
    'sorl.thumbnail',
)

CACHES = {
#    'default': {                                                                           
#        'BACKEND': 'django.core.cache.backends.db.DatabaseCache',                          
#        'LOCATION': 'cache',                                                               
#    }                                                                                    
    'default': {
        'BACKEND': 'django.core.cache.backends.memcached.MemcachedCache',
        'LOCATION': '127.0.0.1:11211',
    }
}

# 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 = ''

# 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 = '/media/'

Это код в моем шаблоне:

{% thumbnail auction.item.image "100x100" crop="center" as im %}
    <img src="{{ im.url }}" width="{{ im.width }}" height="{{ im.height }}">
{% endthumbnail %}

Изображение определенно загружается (я проверил каталог, указанный в upload_to), и когда я использовал кеш файловой системы, они сохранялись в кеше каталогов / относительно моего приложения.Я изменил его, чтобы использовать memcache, чтобы посмотреть, поможет ли это.

1 Ответ

6 голосов
/ 31 мая 2011

Вам необходимо правильно настроить MEDIA_URL. Атрибут "url" в ImageFile - это, в основном, просто проход от базовой серверной части хранилища. Для готового Django путь upload_to добавляется к MEDIA_URL , чтобы сгенерировать URL для FileField.

Что у вас есть: '' + 'кеш / e5 / 25 / e5253a328b9130ecd7d820893f44b0e6.jpg'
Что вы хотите: '/ media /' + 'кеш / e5 / 25 / e5253a328b9130ecd7d820893f44b0e6.jpg'

Примечание: вам нужно убедиться, что MEDIA_URL привязан / сопоставлен с любым каталогом, в который Django загружает ваши файлы (MEDIA_ROOT).

----- РЕДАКТИРОВАТЬ ----
Смотрите следующие ссылки на исходный код хранилища Django по умолчанию. https://code.djangoproject.com/browser/django/tags/releases/1.3/django/core/files/storage.py#L154
https://code.djangoproject.com/browser/django/tags/releases/1.3/django/core/files/storage.py#L240

...