Estoy usando un ImageField
para almacenar imágenes de perfil en mi modelo.Imagen predeterminada para ImageField en el ORM de Django
¿Cómo configuro para devolver una imagen predeterminada si no se define ninguna imagen?
Estoy usando un ImageField
para almacenar imágenes de perfil en mi modelo.Imagen predeterminada para ImageField en el ORM de Django
¿Cómo configuro para devolver una imagen predeterminada si no se define ninguna imagen?
puede probar esto en su vista:
{% ifequal object.image None %}
<img src="DEFAULT_IMAGE" />
{% else %}
display image
{% endifequal %}
no he probado esto, pero estoy relativamente seguro de que sólo puede configurarlo como un defecto en su campo.
pic = models.ImageField(upload_to='blah', default='path/to/my/default/image.jpg')
EDITAR: Estúpido stackoverflow no me deja hacer ningún comentario sobre las respuestas de otras personas, pero ese viejo fragmento no es lo que quiere. Recomiendo encarecidamente django-imagekit porque hace toneladas de gran cambio de tamaño de imagen y manipulación de forma muy fácil y limpia.
Gracias por ese enlace - parece que lo usaré abajo el camino bastante. – Yuvi
@ericflo: Sí, StackOverflow no te deja dejar comentarios hasta que tengas 50 reputación, lo cual es un poco molesto. – Powerlord
En realidad, esto funciona. Aunque quizás no sea ideal ... Se comporta más como 'inicial' que 'predeterminado' porque establece el valor predeterminado en la creación, pero si elimina la imagen no establece el valor de nuevo a su valor predeterminado. Así que es posible que desee establecer ese valor predeterminado como una constante en algún lugar y volver a establecerlo manualmente en delete. –
En teoría, también podría usar una función dentro de la definición de su modelo. Pero no sé si esto es una buena práctica:
class Image(model.Models):
image = ....
def getImage(self):
if not self.image:
# depending on your template
return default_path or default_image_object
y luego dentro de una plantilla
<img src="img.getImage" />
Esto le da una gran flexibilidad para el futuro ...
estoy utilizando sorl para la generación de miniaturas con gran éxito
Django ya proporciona el método url() para este propósito: –
shanyu
Es cierto, pero eso no podría proporcionar una url predeterminada. Puede crear una clase personalizada 'ImageField' con una url predeterminada que se devuelve si el valor de la imagen es None. –
Puede proporcionar un valor inicial con el parámetro 'predeterminado'. Si ya hay una imagen y desea configurarlo para que por defecto (en lugar de eliminarlo), puede intentar algo como esto:
DEFAULT = 'img/default.jpg'
class Example(models.Model):
image = models.ImageField(default=DEFAULT)
def set_image_to_default(self):
self.image.delete(save=False) # delete old image file
self.image = DEFAULT
self.save()
continuación, puede utilizar set_image_to_default()
en lugar de image.delete()
, si lo prefiere el valor por defecto .
En el campo de la imagen
field = models.ImageField(upload_to='xyz',default='default.jpg')
Nota: ruta debe estar dentro MEDIA_ROOT.
{% if obj.image%} mostrar {% else%}
{% endif%} - grabar todas las etiquetas {% ifequal%} !! –
SmileyChris
Esto es lo que estoy haciendo, pero eso es duplicar el código, ¿no? – Yuvi
si lo necesita en todas sus vistas puede usar un include, puede llamarlo show_obj_image.html y luego use {% include "show_obj_image.html"%} – imjoevasquez