Skip to content

Instantly share code, notes, and snippets.

@StasKoval
Created September 23, 2012 13:45
Show Gist options
  • Save StasKoval/3771079 to your computer and use it in GitHub Desktop.
Save StasKoval/3771079 to your computer and use it in GitHub Desktop.
AdminImageWidget
from django.contrib import admin
from django.db import models
from django.contrib import admin
from django.forms import forms
from django.utils.safestring import mark_safe
from django.contrib.admin.widgets import AdminFileWidget
from models import Service, Client, Proyect, Image, Country,LineAction
from cms.plugins.text.widgets.wymeditor_widget import WYMEditor
from sorl.thumbnail.admin import AdminInlineImageMixin
from django.conf.urls.defaults import patterns
class AdminImageWidget(AdminFileWidget):
def render(self, name, value, attrs=None):
output = []
if value and getattr(value, "url", None):
image_url = value.url
file_name=str(value)
# defining the size
size='100x100'
x, y = [int(x) for x in size.split('x')]
try :
# defining the filename and the miniature filename
filehead, filetail = os.path.split(value.path)
basename, format = os.path.splitext(filetail)
miniature = basename + '_' + size + format
filename = value.path
miniature_filename = os.path.join(filehead, miniature)
filehead, filetail = os.path.split(value.url)
miniature_url = filehead + '/' + miniature
# make sure that the thumbnail is a version of the current original sized image
if os.path.exists(miniature_filename) and os.path.getmtime(filename) > os.path.getmtime(miniature_filename):
os.unlink(miniature_filename)
# if the image wasn't already resized, resize it
if not os.path.exists(miniature_filename):
image = Image.open(filename)
image.thumbnail([x, y], Image.ANTIALIAS)
try:
image.save(miniature_filename, image.format, quality=100, optimize=1)
except:
image.save(miniature_filename, image.format, quality=100)
output.append(u' <div><a href="%s" target="_blank"><img src="%s" alt="%s" /></a></div> %s ' %\
(miniature_url, miniature_url, miniature_filename, _('Change:')))
except:
pass
output.append(super(AdminFileWidget, self).render(name, value, attrs))
return mark_safe(u''.join(output))
class ImageInline(AdminInlineImageMixin,admin.TabularInline):
model =Image
can_delete = True
def formfield_for_dbfield(self,db_field, **kwargs):
if isinstance(db_field, models.ImageField):
return db_field.formfield( widget = AdminImageWidget)
return super(ImageInline, self).formfield_for_dbfield(db_field, **kwargs)
class ProyectAdmin(admin.ModelAdmin):
inlines = [ImageInline]
formfield_overrides = {
# models.TextField : {'widget': WYMEditor},
}
list_display = ("name", "sequence",)
list_editable = ( "sequence", )
search_fields = ['name']
class Media:
js = (
"js/jquery-1.4.3.min.js",
"https://ajax.googleapis.com/ajax/libs/jqueryui/1.8.9/jquery-ui.min.js",
"js/order.js")
admin.site.register(Service)
admin.site.register(Client)
admin.site.register(Country)
admin.site.register(Proyect,ProyectAdmin)
admin.site.register(LineAction)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment