# utils.py
import os
from PIL import Image
def get_thumbnail_url (image_url, size = 150):
thumbs_part = 'thumbs_' + str (size)
image_url_parts = image_url.rsplit ('/', 1)
return image_url_parts [0] + '/' + thumbs_part + '/' + image_url_parts [1]
def get_thumbnail_path (image_path, size = 150):
thumbs_dir = 'thumbs_' + str (size)
dirname, filename = os.path.split (image_path)
dirname = os.path.join (dirname, thumbs_dir)
if not os.path.exists (dirname):
os.mkdir (dirname, 0755)
return os.path.join (dirname, filename)
def create_thumbnail (image_path, size = 150):
thumb_path = get_thumbnail_path (image_path, size)
delete_thumbnail (image_path, size)
img = Image.open (image_path)
img.thumbnail ((size, size), Image.ANTIALIAS)
img.save (thumb_path)
def delete_thumbnail (image_path, size = 150):
thumb_path = get_thumbnail_path (image_path, size)
if os.path.exists (thumb_path):
os.remove (thumb_path) from django.db.models.signals import post_save, pre_delete
from utils import *
class FlatPicture (models.Model):
picture = models. ImageField (upload_to = 'uploads / flatpictures', max_length = 250)
description = models.CharField (max_length = 250, blank = True)
def get_thumbnail_html (self):
html = '<a class="image-picker" href="%s"> <img src = "% s" alt = "% s" /> </a>'
return html% (self.picture.url, get_thumbnail_url (self.picture.url), self.description)
get_thumbnail_html.short_description = _ ('thumbnail')
get_thumbnail_html.allow_tags = True
def post_save_handler (sender, ** kwargs):
create_thumbnail (kwargs ['instance']. picture.path)
post_save.connect (post_save_handler, sender = FlatPicture)
def pre_delete_handler (sender, ** kwargs):
delete_thumbnail (kwargs ['instance']. picture.path)
pre_delete.connect (pre_delete_handler, sender = FlatPicture) 
{% extends "admin / base.html"%}
{% load i18n%}
{% block title%} {{title}} | Admin example.com {% endblock%}
{% block branding%}
<h1 id = "site-name"> example.com admin panel </ h1>
{% endblock%}
{% block nav-global%} {% endblock%}
{% block extrastyle%}
<script type = "text / javascript" src = "/ media / lib / jquery-1.3.2.min.js"> </ script>
<script type = "text / javascript" src = "/ media / lib / tiny_mce / jquery.tinymce.js"> </ script>
<script type = "text / javascript" src = "/ media / js / admin / base.js"> </ script>
{% endblock%} $ (). ready (function () {
$ ('a [target = _blank]'). each (function () {
if ($ (this) .html (). indexOf ('uploads /') == 0) {
var path = $ (this) .attr ('href');
path = path.substring (0, path.lastIndexOf ('/'))
+ '/ thumbs_150'
+ path.substring (path.lastIndexOf ('/'));
$ (this) .parent (). after ('<a style = "margin-left: 10em" href = "'
+ $ (this) .attr ('href') + '"target =" _ blank "> <img src ="'
+ path + '"alt =" image "/> </a>');
}
});
}); class FlatPictureAdmin (admin.ModelAdmin):
class Media:
js = ['js / admin / display_thumbs.js']
list_display = ['get_thumbnail_html', '__unicode__', 'description']
list_display_links = ['__unicode__']
admin.site.register (FlatPicture, FlatPictureAdmin) 
Source: https://habr.com/ru/post/78256/
All Articles