Created
September 23, 2012 13:45
-
-
Save StasKoval/3771079 to your computer and use it in GitHub Desktop.
AdminImageWidget
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
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