Qu'est-ce que @permalien et get_absolute_url dans Django?
Qu'est-ce que @permalink
et get_absolute_url
dans Django? Quand et pourquoi à utiliser?
S'il vous plaît un exemple très simple (un exemple pratique). Grâce
Vous devez vous connecter pour publier un commentaire.
@permalink
est un python décorateur, tandis queget_absolute_url
est une méthode sur un modèle django.Les deux sont concernés par vous permettant d'inverser l'URL d'un objet particulier et doivent être utilisés ensemble. Ils sont utilisés en tout temps, vous devez fournir un lien à un objet particulier ou souhaitez afficher l'objet d'une URL spécifique (le cas échéant) de l'utilisateur
Il vous suffit d'écrire votre
get_absolute_url
méthode pour renvoyer une chaîne codée en dur, mais ce ne serait pas adhérer à de Django reinhardt, de la philosophie de DRY (don't repeat yourself). Au lieu de cela, il y a le@permalink
pour rendre les choses plus souple.Si vous lisez les docs sur le sujet vous verrez comment ils se rapportent les uns aux autres. le
@permalink
décorateur crochets dans django URLconf du backend, vous permettant d'écrire beaucoup plus portable code à l'aide de nommé modèles url. C'est préférable de simplement à l'aide deget_absolute_url
sur son propre: votre code devient beaucoup plus sèche que vous n'avez pas à spécifier les chemins d'accès.et dans urls.py
À compter de 2013, la documentation de Django décourager l'utilisation de l'permalien décorateur et a encouragé l'utilisation d'un reverse() dans le corps de la get_absolute_url méthode. D'ici 2015, le permalien décorateur semblait avoir disparu sans laisser de trace à partir de la documentation de Django, et il a finalement été retiré dans Django version 2.1 en 2018.
Donc, pour une norme SEC moyen de créer un lien permanent vers un seul objet, utiliser get_absolute_url() dans votre modèle comme ceci:
et puis avoir une entrée dans urls.py que les points de vue:
reverse
doivent être importés à partir dedjango.urls
, ou vous aurez unModuleNotFoundError
.source