2009-08-14 25 views

Respuesta

3

puede probar esto en su vista:

{% ifequal object.image None %} 
    <img src="DEFAULT_IMAGE" /> 
{% else %} 
    display image 
{% endifequal %} 
+12

{% if obj.image%} mostrar {% else%} {% endif%} - grabar todas las etiquetas {% ifequal%} !! – SmileyChris

+0

Esto es lo que estoy haciendo, pero eso es duplicar el código, ¿no? – Yuvi

+1

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

25

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.

+0

Gracias por ese enlace - parece que lo usaré abajo el camino bastante. – Yuvi

+0

@ericflo: Sí, StackOverflow no te deja dejar comentarios hasta que tengas 50 reputación, lo cual es un poco molesto. – Powerlord

+4

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. –

7

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

+2

Django ya proporciona el método url() para este propósito: shanyu

+2

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. –

0

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 .

0

En el campo de la imagen

field = models.ImageField(upload_to='xyz',default='default.jpg') 

Nota: ruta debe estar dentro MEDIA_ROOT.

Cuestiones relacionadas