Django में @permalink
और get_absolute_url
क्या है? कब और इसका उपयोग करने के लिए क्यों?Django में @permalink और get_absolute_url क्या है?
कृपया एक बहुत ही सरल उदाहरण (वास्तविक व्यावहारिक उदाहरण)। धन्यवाद
Django में @permalink
और get_absolute_url
क्या है? कब और इसका उपयोग करने के लिए क्यों?Django में @permalink और get_absolute_url क्या है?
कृपया एक बहुत ही सरल उदाहरण (वास्तविक व्यावहारिक उदाहरण)। धन्यवाद
@permalink
, एक अजगर decorator है, जबकि get_absolute_url
एक Django मॉडल पर एक विधि है।
दोनों एक विशेष वस्तु के लिए यूआरएल को उलट करने की अनुमति देने के साथ चिंतित हैं और इन्हें एक साथ इस्तेमाल किया जाना चाहिए। जब भी आपको किसी विशेष ऑब्जेक्ट का लिंक प्रदान करने की आवश्यकता होती है या उस ऑब्जेक्ट के विशिष्ट यूआरएल (यदि उसके पास एक है) को उपयोगकर्ता को
प्रदर्शित करना चाहते हैं तो आप हार्ड कोडित स्ट्रिंग को वापस करने के लिए बस अपनी get_absolute_url
विधि लिख सकते हैं, लेकिन यह डीजेई के डीजेंगो के दर्शन का पालन नहीं करेगा (खुद को दोहराएं)। इसके बजाय, चीजों को और अधिक लचीला बनाने के लिए @permalink
है।
यदि आप the docs on the subject पढ़ते हैं तो आप देखेंगे कि वे एक-दूसरे से कैसे संबंधित हैं। @permalink
सजावटी डजेगो के यूआरएल कॉन्फ़्रेंस के बैकएंड में हुक करता है, जिससे आप named url patterns का उपयोग कर अधिक पोर्टेबल कोड लिख सकते हैं। यह केवल get_absolute_url
का उपयोग करने के लिए बेहतर है: आपका कोड बहुत अधिक DRYer हो जाता है क्योंकि आपको पथ निर्दिष्ट करने की आवश्यकता नहीं है।
class BlogPost(models.Model):
name = modelsCharField()
slug = models.SlugField(...)
@permalink
def get_absolute_url(self):
return ("blog-detail", [self.slug,])
और urls.py
...
url(r'/blog/(?P<slug>[-w]+)/$', blog.views.blog_detail, name="blog-detail")
2013 की स्थिति के अनुसार में, Django प्रलेखन स्थायी लिंक डेकोरेटर के प्रयोग को प्रोत्साहित और get_absolute_url विधि के शरीर में() रिवर्स के उपयोग के लिए प्रोत्साहित किया। लेकिन 2015 तक, परमालिंक सजावट में डैंजो दस्तावेज से ट्रेस किए बिना गायब हो गया है, इसलिए हम सुरक्षित रूप से यह मान सकते हैं कि इसे हटा दिया गया है।
तो, एक मानक सूखी तरह, एक वस्तु को देखने के लिए एक स्थायी कड़ी बनाने के इस तरह अपने मॉडल में get_absolute_url() का उपयोग करने के लिए: urls.py कि अंक में एक प्रविष्टि
from django.db import models
from django.urls import reverse
# NOTE: pre Django 1.10+ this is "from django.core.urlresolvers import reverse"
class MyModel(models.Model):
slug = models.SlugField()
def get_absolute_url(self):
return reverse('mymodel_detail', args=(self.slug,))
और उसके बाद है आपके विचार में:
url(r'^(?P<slug>[-\w\d\_]+)/$',
MyModelDetailView.as_view(),
name='mymodel_detail'),
Django 2.0 में, 'रिवर्स' को 'django.urls' से आयात किया जाना चाहिए, या आपको' मॉड्यूल नॉटफाउंड एरर 'मिलेगा। – cjohnson318
धन्यवाद - मैं अपडेट करूंगा –