Résolue

Le décorateur property dans Django

# Django # HTML

Gabriel Trouvé

Mentor

Re,


On créer un modèle, avec une méthode décorée d'un @property.

Cette méthode est utilisé dans le HTML.


Dans ce cas, pk utiliser un property ?

Que je mette le property ou non j'ai le résultat escompté.


Est-ce que c'est pour par la suite pouvoir utiliser cette méthode dans admin.py ou autre ? Ou c'est une convention ? ou autre ?


Merci


class BlogPost(models.Model):
    title = models.CharField(max_length=255, unique=True, verbose_name="Titre")
    slug = models.SlugField(max_length=255, blank=True, unique=True)
    author = models.ForeignKey(User, on_delete=models.SET_NULL, null=True, blank=True)
    # pour afficher date et heure à laquelle l'article a été créé ou modif
    last_updated = models.DateTimeField(auto_now=True)
    # ici nous avons le contrôle sur la date
    created_on = models.DateField(blank=True, null=True)
    published = models.BooleanField(default=False, verbose_name="Publié")
    content = models.TextField(blank=True, verbose_name="Contenu")

    class Meta:
        # par date de création, - pour que les derniers soient au début
        ordering = ['-created_on']
        verbose_name = "Article"
def __str__(self):
        return f"{self.title} - {self.created_on}"
def save(self, *args, **kwargs):
        if not self.slug:
            self.slug = slugify(self.title)
        super().save(*args, **kwargs)

    @property
def author_or_default(self):
        if self.author:
            return self.author.username
        return "L'auteur inconnu"


<h5>Publié par <i>{{ post.author_or_default }}</i></h5> 


Salut Gab !


Effectivement dans un template, aucune différence car tu n'as pas besoin dans le langage de template de Django d'utiliser les parenthèses après une fonction.


Tu peux donc utiliser post.author_or_default (et si tu essaies de mettre des parenthèses tu ne peux même pas : tu auras une erreur de template).


Donc ça ne change pas grand-chose.


La raison de mettre une propriété est effectivement au niveau de l'utilisation dans un script Python. Il y a plein d'autres endroits, en dehors des templates (dans les vues, dans un script, peu importe) dans lequel tu pourrais utiliser author_or_default. Dans ce cas-là tu peux donc te poser la question si une propriété fait du sens ou non.

Gabriel Trouvé

Mentor

D'accord merci

Inscris-toi

(c'est gratuit !)

Inscris-toi

Tu dois créer un compte pour participer aux discussions.

Créer un compte

Rechercher sur le site

Formulaire de contact

Inscris-toi à Docstring

Pour commencer ton apprentissage.

Tu as déjà un compte ? Connecte-toi.