Image par défaut pour ImageField dans L'ORM de Django

j'utilise un ImageField pour stocker les photos de profil sur mon modèle.

Comment puis-je retourner une image par défaut si aucune image n'est-elle définie?

18
demandé sur Yuvi 2009-08-14 13:20:32

5 réponses

Je n'ai pas essayé cela, mais je suis relativement sûr que vous pouvez le Définir comme un défaut dans votre domaine.

pic = models.ImageField(upload_to='blah', default='path/to/my/default/image.jpg')

EDIT: Stupide StackOverflow ne me laisse pas de commentaires sur les réponses des autres, mais que les vieux extrait n'est pas ce que vous voulez. Je recommande fortement django-imagekit parce qu'il fait des tonnes de bonnes choses de redimensionnement et de manipulation d'image très facilement et proprement.

26
répondu ericflo 2009-08-14 09:26:47

vous pourriez théoriquement aussi utiliser une fonction dans votre définition de modèle. Mais je ne sais pas si c'est une bonne pratique:

class Image(model.Models):
    image = ....

    def getImage(self):
        if not self.image:
            # depending on your template
            return default_path or default_image_object

et puis, à l'intérieur d'un modèle

   <img src="img.getImage" />

Cela vous donne une grande flexibilité pour l'avenir...

j'utilise sorl pour la génération de vignettes avec un grand succès

8
répondu msmart 2009-08-14 13:41:02

vous pouvez essayer ce à votre avis:

{% ifequal object.image None %}
    <img src="DEFAULT_IMAGE" />
{% else %}
    display image
{% endifequal %}
3
répondu imjoevasquez 2009-08-14 09:23:59

vous pouvez fournir une valeur initiale avec le paramètre 'default'. S'il y a déjà une image et que vous voulez la définir par défaut (au lieu de la supprimer), vous pouvez essayer quelque chose comme ceci:

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()

alors vous pouvez utiliser set_image_to_default() au lieu de image.delete() si vous préférez la valeur par défaut.

0
répondu Balik 2017-07-12 14:02:55

dans votre champ d'image

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

Note: le chemin doit être à L'intérieur de MEDIA_ROOT.

0
répondu cz game 2018-01-31 19:13:51