No estaba seguro de cómo hacer esta pregunta. Quiero enviar imágenes del tamaño correcto a diferentes pantallas desde mi aplicación django. Lo tengo para que cuando se cargue una imagen, se guarde en los medios pero con varios tamaños.
Entonces, la imagen de arriba se muestra en my media/uploads/pieces/{ID}/Sargent.jpg y todas sus imágenes de otros tamaños. El imageField de los modelos apunta al archivo "original" sin guión bajo ni ancho.
plantillas/arte/pieza_detalle.html
<picture> <source media="(min-width:300px)" srcset="{{ piece.image.url ??? }}"> <source media="(min-width:375px)" srcset="{{ piece.image.url ??? }}"> <source media="(min-width:786px)" srcset="{{ piece.image.url ??? }}"> <source media="(min-width:1440px)" srcset="{{ piece.image.url ??? }}"> <img src="{{ piece.image.url }}" alt="{{ piece.name }} - {{ piece.height }} x {{ piece.width }}"> </picture> Luego, aquí estoy usando una etiqueta HTML <picture> con algunos medios de origen para ser la forma en que sirvo la imagen adecuada. Sin embargo, no sé cuál es la mejor manera de hacer lo que estoy tratando de lograr. Me doy cuenta de que estos puntos de quiebre probablemente no sean exactamente lo que necesito, pero solo trato de transmitir mi idea.
Pensé en agregar más campos de "ruta" al modelo de pieza y configurarlos también en estas otras rutas de URL, pero parece una solución descuidada para esto. De lo contrario, creo que necesitaría manipular algunas cadenas en la vista antes de que llegue a la plantilla...
Además, ¿cuáles son los puntos de ruptura de imagen estándar de hoy?
¡Gracias por adelantado!
puedes crear un filtro personalizado
que acepta la URL de la imagen y el ancho específico y devuelve la URL con el ancho conectado.
def format_img_src(img_ur, size): """Returns an image of specific size""" # do your formatting hereclass my_model_name(models.Model): ...... image = models.ImageField(default='default.jpg', upload_to = '') def save(self, *args, **kwargs): super(my_model_name, self).save(*args, **kwargs) img = Image.open(self.image.path) if img.height>300 or img.width > 300: img.thumbnail( (300,300) ) img.save(self.image.path) Si usa este método de save , entonces su img ahorra 300 * 300. Puede cambiar su tamaño.