Soy nuevo en Django (y en Python) y he estado tratando de resolver algunos detalles antes de utilizar otras aplicaciones. Tengo problemas para entender dónde encajan las cosas en la forma de hacer las cosas de Django (o Python). Lo que estoy tratando de resolver es cómo cambiar el tamaño de una imagen, una vez que ha sido cargada. Tengo mi configuración modelo muy bien y enchufado a la administración, y la imagen UPLOADS bien en el directorio:¿Cambiar el tamaño de la imagen con django?
from django.db import models
# This is to list all the countries
# For starters though, this will be just United Kingdom (GB)
class Country(models.Model):
name = models.CharField(max_length=120, help_text="Full name of country")
code = models.CharField(max_length=2, help_text="This is the ISO 3166 2-letter country code (see: http://www.theodora.com/country_digraphs.html)")
flag = models.ImageField(upload_to="images/uploaded/country/", max_length=150, help_text="The flag image of the country.", blank=True)
class Meta:
verbose_name_plural = "Countries"
def __unicode__(self):
return self.name
Lo que ahora estoy teniendo problemas con que se toma ese archivo y hacer un nuevo archivo en una imagen en miniatura. Como digo, me gustaría saber cómo hacerlo sin usar las aplicaciones de los demás (por ahora). Tengo este código de DjangoSnippets:
from PIL import Image
import os.path
import StringIO
def thumbnail(filename, size=(50, 50), output_filename=None):
image = Image.open(filename)
if image.mode not in ('L', 'RGB'):
image = image.convert('RGB')
image = image.resize(size, Image.ANTIALIAS)
# get the thumbnail data in memory.
if not output_filename:
output_filename = get_default_thumbnail_filename(filename)
image.save(output_filename, image.format)
return output_filename
def thumbnail_string(buf, size=(50, 50)):
f = StringIO.StringIO(buf)
image = Image.open(f)
if image.mode not in ('L', 'RGB'):
image = image.convert('RGB')
image = image.resize(size, Image.ANTIALIAS)
o = StringIO.StringIO()
image.save(o, "JPEG")
return o.getvalue()
def get_default_thumbnail_filename(filename):
path, ext = os.path.splitext(filename)
return path + '.thumb.jpg'
... pero esto en última instancia, me ha confundido ... Como no sé cómo esta 'encaja' Django a mi aplicación? Y realmente, ¿es la mejor solución para simplemente hacer una miniatura de una imagen que se ha cargado correctamente? ¿Alguien puede mostrarme una buena, sólida y decente manera que un principiante como yo puede aprender a hacer esto correctamente? Como en, saber dónde poner ese tipo de código (models.py? Forms.py? ...) y cómo funcionaría en contexto? ... Solo necesito un poco de ayuda para entender y resolver este problema.
¡Gracias!
Gracias leafnode, me He oído hablar de esto y lo voy a ver. Pero esperaba tratar de comprender las formas subyacentes de hacer las cosas primero para poder entender mejor cómo funciona todo ... ¿Tal vez no vale la pena hacerlo? ... pero estaba pensando que valió la pena hacerlo para convertirme en un mejor desarrollador de Python/Django? – littlejim84
Si desea entrar en detalles, mire la otra respuesta, pero recuerde que es para formularios del lado del usuario. – leafnode
es deaaaaaaaaaaaaad – titus