Форум сайта python.su
Есть модуль models.py и в нем модель Book:
from django.db import models
from sorl.thumbnail import ImageField
from sorl.thumbnail.shortcuts import get_thumbnail
from sorl.thumbnail import delete
import settings
import os
class Book(models.Model):
......................................................
title = models.CharField(u'название', max_length=50)
cover = ImageField(upload_to='img/covers/', blank=True, null=True, verbose_name=u'обложка')
def small_cover(self):
if self.cover:
resize_cover = get_thumbnail(self.cover, '60x80', crop='center', quality=99)
html = '<a href="%s%s"><img src="%s" title="%s" /></a>'
return html % (settings.MEDIA_URL, self.cover, resize_cover.url, self.title)
else:
return u'отсутствует'
small_cover.short_description = u'миниатюра'
small_cover.allow_tags = True
def save(self):
try:
old_cover = Book.objects.get(id=self.id)
except Book.DoesNotExist:
pass
else:
if old_cover.cover and old_cover.cover != self.cover:
path_cover = os.path.join(settings.MEDIA_ROOT, '%s') % old_cover.cover
#path_small_cover = os.path.join(settings.MEDIA_ROOT, '%s') % resize_cover.url
if os.path.exists(path_cover):
delete(old_cover.cover)
#if os.path.exists(path_small_cover):
#delete(resize_cover.url)
super(Book, self).save()
Офлайн
1) в данном случае нормально, правда return u'отсутствует' … я б всё-таки None возвращал, а уже в шаблоне выводил |default:'отсутствует'
2) self.cover.delete() не работает? этот момент в джанге не раз меняли могу ошибаться, если у тебя дефолтный сторедж. то https://code.djangoproject.com/browser/django/trunk/django/core/files/storage.py#L219 (но вроде я прав ;]) + в коде сорла
3) https://github.com/sorl/sorl-thumbnail/blob/master/sorl/thumbnail/fields.py#L13 похоже всё должно удаляться
Офлайн
slav0nic1) сделал так:
1) в данном случае нормально, правда return u'отсутствует' … я б всё-таки None возвращал, а уже в шаблоне выводил |default:'отсутствует'
2) self.cover.delete() не работает? этот момент в джанге не раз меняли могу ошибаться, если у тебя дефолтный сторедж. то https://code.djangoproject.com/browser/django/trunk/django/core/files/storage.py#L219 (но вроде я прав ;]) + в коде сорла
3) https://github.com/sorl/sorl-thumbnail/blob/master/sorl/thumbnail/fields.py#L13 похоже всё должно удаляться
def small_cover(self):
if self.cover:
resize_cover = get_thumbnail(self.cover, '60x80', crop='center', quality=99)
html = '<a href="%s%s"><img src="%s" title="%s" /></a>'
return html % (settings.MEDIA_URL, self.cover, resize_cover.url, self.title)
а уже в шаблоне выводил |default:'отсутствует'В шаблоне я понял как это будет работать.
class BookAdmin(admin.ModelAdmin):
list_display = ('title', 'small_cover', )
def save(self):
try:
old_cover = Book.objects.get(id=self.id)
except Book.DoesNotExist:
pass
else:
if old_cover.cover and old_cover.cover != self.cover:
path_cover = os.path.join(settings.MEDIA_ROOT, '%s') % old_cover.cover
if os.path.exists(path_cover):
delete(old_cover.cover)
super(Book, self).save()
Офлайн
намёк https://github.com/sorl/sorl-thumbnail/blob/master/sorl/thumbnail/management/commands/thumbnail.py
использовать key value store?) или написать свою команду, в принципе если вы удалите что-то из кеша, ничего страшного не случится, можно раз в месяц перестраивать кеш например, если у вас конечно не дохера+1 этих картинок
или опять же напишите команду которая дропает empty каталоги
Офлайн