Django में एक "स्लग" क्या है?


588

जब मैं Django कोड पढ़ता हूं तो मैं अक्सर मॉडल में देखता हूं जिसे "स्लग" कहा जाता है। मुझे पूरा यकीन नहीं है कि यह क्या है, लेकिन मुझे पता है कि इसका यूआरएल के साथ कुछ लेना-देना है। इस स्लग-चीज़ का उपयोग कैसे और कब किया जाना चाहिए?

(मैंने इसकी शब्दावली में इसकी परिभाषा पढ़ी है ।)

जवाबों:


752

एक "स्लग" एक वैध URL उत्पन्न करने का एक तरीका है, जो आमतौर पर पहले से प्राप्त डेटा का उपयोग करता है। उदाहरण के लिए, एक स्लग URL बनाने के लिए एक लेख के शीर्षक का उपयोग करता है। मैं एक फ़ंक्शन के माध्यम से स्लग को उत्पन्न करने की सलाह देता हूं, इसे मैन्युअल रूप से सेट करने के बजाय शीर्षक (या डेटा का एक और टुकड़ा) दिया जाता है।

एक उदाहरण:

<title> The 46 Year Old Virgin </title>
<content> A silly comedy movie </content>
<slug> the-46-year-old-virgin </slug>

अब दिखावा करते हैं कि हमारे पास एक Django मॉडल है जैसे:

class Article(models.Model):
    title = models.CharField(max_length=100)
    content = models.TextField(max_length=1000)
    slug = models.SlugField(max_length=40)

आप URL और सार्थक नाम के साथ इस ऑब्जेक्ट को कैसे संदर्भित करेंगे? आप उदाहरण के लिए Article.id का उपयोग कर सकते हैं ताकि URL इस तरह दिखाई दे:

www.example.com/article/23

या, आप इस तरह शीर्षक का संदर्भ लेना चाह सकते हैं:

www.example.com/article/The 46 Year Old Virgin

चूंकि स्थान URL में मान्य नहीं हैं, इसलिए उन्हें प्रतिस्थापित किया जाना चाहिए %20, जिसके परिणामस्वरूप:

www.example.com/article/The%2046%20Year%20Old%20Virgin

दोनों ही प्रयास बहुत सार्थक, आसानी से पढ़े जाने वाले URL के परिणामस्वरूप नहीं हैं। यह बेहतर है:

www.example.com/article/the-46-year-old-virgin

इस उदाहरण में, the-46-year-old-virginएक स्लग है: इसे सभी अक्षरों को डाउन-केसिंग करके और हाइफ़न द्वारा रिक्त स्थान की जगह शीर्षक से बनाया गया है -

अन्य उदाहरण के लिए इस वेब पेज का URL भी देखें।


72
अच्छा विवरण, लेकिन जोड़ने के लिए: SlugField बॉक्स से बाहर विशिष्टता को सुनिश्चित नहीं करता है, इसलिए यदि डिफ़ॉल्ट रूप से इसका उपयोग किया जाता है, तो यह एक बेहतर URL है: www.example.com/article/the-40-year-old-virgin/23 / जहाँ '23' लेख है। और यह वास्तव में क्वेरी करने के लिए उपयोग किया जाता है (स्लग पर क्वेरी करने से भी तेज़)।
डेनियल नाब

126
मुझे www.example.com/article/23/the-40-year-old-virgin पढ़ना आसान लगता है।
मिनीक्वार

16
यदि आप आईडी के आधार पर सामग्री की सेवा करते हैं, तो यह तय करें कि यह जांच लें कि स्लग सामग्री से मेल खाता है (और यदि यह नहीं है तो 404 लौटाएं) या पूरी तरह से अनदेखा करें। मुझे नहीं लगता कि सबसे अच्छा, एसईओ-वार के लिए एक सामान्य नियम है। यदि आप अपने ब्राउज़र में stackoverflow.com/questions/427102/… दर्ज करते हैं, तो SO तब भी यह पृष्ठ प्रदर्शित करेगा ।
टॉमस आंद्रल

2
@ डैनियल को ध्यान में रखते हुए, एक स्लग भी असली डेटाबेस आईडी को छुपाता है, इसलिए आपका उदाहरण स्लग का उपयोग करने के एक लाभ को हरा देता है।
इनो

15
@ कोई स्लग एसईओ के लिए जोड़ा जाता है और पेरीलिंक गुडई-नेस के लिए। आईडी का उपयोग अनुक्रमित देखने के लिए किया जाता है। Stackoverflow के लिए एसईओ शानदार है - और वे बिल्कुल इस रणनीति का उपयोग करते हैं। आपका तर्क "डेटाबेस आईडी छिपाएं" था, जिसे आपने अब "एसईओ" में बदल दिया है। जाने क्या है?
जोश स्मेटन

134

अगर मैं कुछ ऐतिहासिक संदर्भ प्रदान कर सकता हूं:

अवधि "स्लग" का ढलाई धातु-सीसा के साथ करना है, इस मामले में - जिसमें से प्रेस फोंट बनाए गए थे। तब हर पेपर की अपनी फोंट फैक्ट्री नियमित रूप से फिर से पिघल जाती थी और नए नए साँचे में बदल जाती थी, क्योंकि कई प्रिंट के बाद वे खराब हो जाते थे। मेरे जैसे प्रशिक्षुओं ने अपना करियर वहीं से शुरू किया, और पूरे रास्ते शीर्ष पर (अब नहीं)।

टाइपोग्राफ को एक लेख के पाठ को एक बुद्धिमान में स्टैक्ड लीड पात्रों के साथ पिछड़े तरीके से लिखना था। इसलिए मुद्रण समय पर पत्र सीधे कागज पर होंगे। सभी टाइपोग्राफ अख़बार पढ़ सकते थे, जो छपे हुए थे। इसलिए स्लग, (घोंघे की तरह) भी धीमी कहानियों (अंतिम होने के लिए) बेंच पर इंतजार कर रहे थे, पूरी तरह से उनके मुट्ठी के अक्षरों से पहचाने जाते थे, ज्यादातर पूरे शीर्षक आमतौर पर अधिक पठनीय होते थे। कुछ "हॉट" खबरें वहाँ पर इंतज़ार कर रही थीं, जो कि आखिरी असेंबली और निश्चित प्रिंटिंग से पहले संभावित अंतिम मिनट सुधार, (इवनिंग पेपर) के लिए थी।

Django कैनसस में लॉरेंस जर्नल के कार्यालयों से उभरा। जहां शायद कुछ मुद्रण शब्द अभी भी लिंटर करते हैं। ए-Django-उत्साही - और - अनुकूल-पुराने स्लग-लड़का-से-फ्रांस।


61

'स्लग' शब्द अखबार के उत्पादन की दुनिया से आता है।

यह एक अनौपचारिक नाम है जो उत्पादन प्रक्रिया के दौरान एक कहानी को दिया गया है। जैसे-जैसे कहानी बीट रिपोर्टर से अपना रास्ता निकालती है (मानो ये भी मौजूद हैं और भी ?) को "प्रिंटिंग प्रेस" के माध्यम से संपादक के माध्यम , यह वह नाम है जिसके द्वारा इसे संदर्भित किया जाता है, जैसे, "क्या आपने उन त्रुटियों को ठीक किया है ' केट-और-वियाम की कहानी? "।

कुछ सिस्टम (जैसे कि Django) कहानी का पता लगाने के लिए URL के हिस्से के रूप में स्लग का उपयोग करते हैं, एक उदाहरण www.mysite.com/archives/kate-and-william

यहां तक ​​कि स्टैक ओवरफ्लो स्वयं भी ऐसा करता है, GEB-ish (a) सेल्फ-रेफ़रेंशियल के साथ /programming/427102/what-is-a-slug-in-django/427201#427201, हालांकि आप स्लग को बदल सकते हैंblahblah और यह अभी भी ठीक लगेगा।

यह इससे भी पहले की तारीख हो सकती है, क्योंकि पटकथा में प्रत्येक दृश्य की शुरुआत में "स्लग लाइनें" थीं, जो मूल रूप से उस दृश्य की पृष्ठभूमि निर्धारित करती है (जहां, जब, और इसी तरह)। यह बहुत ही समान है कि यह एक प्रिसिस या प्रस्तावना है जो इस प्रकार है।

एक लाइनोटाइप मशीन पर, एक स्लग धातु की एक एकल पंक्ति थी जो व्यक्तिगत पत्र रूपों से बनाई गई थी। पूरी लाइन के लिए एक ही स्लग बनाने से, पुराने चरित्र-दर-चरित्र कंपोजिंग में बहुत सुधार हुआ।

हालांकि निम्नलिखित शुद्ध अनुमान है, स्लग का प्रारंभिक अर्थ नकली सिक्के के लिए था (जिसे किसी तरह दबाया जाना होगा)। मैं उस उपयोग को मुद्रण शब्द में बदल दिया जा सकता है (क्योंकि मूल पात्रों का उपयोग करके स्लग को दबाया जाना था) और वहां से, 'धातु का टुकड़ा' परिभाषा से बदलकर 'कहानी सारांश' परिभाषा में लाया जा सकता है। वहां से, यह उचित मुद्रण से ऑनलाइन दुनिया के लिए एक छोटा कदम है।


(ए) "गोडेल एस्चर, बाख", एक डगलस हॉफस्टैटर द्वारा , जिसे मैं (कम से कम) महान आधुनिक बौद्धिक कार्यों में से एक मानता हूं। आपको उनके अन्य काम "मेटामैगिकल थैमस" की भी जांच करनी चाहिए।


29

स्लग एक अखबार का शब्द है। एक स्लग किसी चीज के लिए एक छोटा लेबल होता है, जिसमें केवल अक्षर, संख्या, अंडरस्कोर या हाइफ़न होते हैं। वे आमतौर पर URL में उपयोग किए जाते हैं। (Django डॉक्स के रूप में)

Django में एक स्लग फ़ील्ड का उपयोग आपके गतिशील रूप से बनाए गए वेब पेजों के लिए मान्य URL को संग्रहीत करने और उत्पन्न करने के लिए किया जाता है ।

जिस तरह आपने स्टैक ओवरफ्लो पर यह प्रश्न जोड़ा था और एक डायनामिक पेज जेनरेट हुआ था और जब आप एड्रेस बार में देखते हैं तो आप रिक्त स्थान के स्थान पर "-" के साथ अपना प्रश्न शीर्षक देखेंगे। बिलकुल एक स्लग फील्ड का काम है।

यहां छवि विवरण दर्ज करें

आपके द्वारा दर्ज किया गया शीर्षक कुछ इस तरह था -> Django में "स्लग" क्या है?

इसे एक स्लग फ़ील्ड में संग्रहीत करने पर यह "व्हाट-ए-स्लग-इन-डजंगो" बन जाता है (इस पेज का URL देखें)


27

से यहाँ

"स्लग" एक अखबार का शब्द है, लेकिन इसका क्या मतलब है यहां URL का अंतिम बिट है। उदाहरण के लिए, शीर्षक के साथ एक पोस्ट, "थोड़ा जिंजो के बारे में" बन जाएगा, "बिट-अबाउट-डीजेंगो" स्वचालित रूप से (यदि आप ऑटो-जनरेट स्लग पसंद नहीं करते हैं, तो आप इसे आसानी से बदल सकते हैं)।


18

यह URL का एक वर्णनात्मक हिस्सा है जो इसे और अधिक मानवीय वर्णनात्मक बनाने के लिए है, लेकिन आवश्यक रूप से वेब सर्वर द्वारा आवश्यक होने के बिना - Django में "स्लग" क्या है? स्लग 'इन-दजंगो-व्हाट-इस-ए-स्लग' है, लेकिन स्लग का उपयोग सर्व किए गए पृष्ठ (इस साइट पर कम से कम) को निर्धारित करने के लिए नहीं किया जाता है


17

स्लग विशिष्ट सामग्री के लिए एक URL अनुकूल छोटा लेबल है। इसमें केवल लेटर्स, नंबर, अंडरस्कोर या हाइफ़न शामिल हैं। स्लग आमतौर पर संबंधित सामग्री के साथ सहेजे जाते हैं और यह URL स्ट्रिंग के रूप में गुजरता है।

स्लग स्लगफिल्ड का उपयोग करके बना सकते हैं

उदाहरण के लिए:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100)

यदि आप शीर्षक को स्लग के रूप में उपयोग करना चाहते हैं, तो django का एक सरल कार्य है slugify

from django.template.defaultfilters import slugify

class Article(models.Model):
    title = models.CharField(max_length=100)

    def slug(self):
        return slugify(self.title)

अगर यह विशिष्टता की जरूरत है, जोड़ें unique=True स्लग क्षेत्र में ।

उदाहरण के लिए, पिछले उदाहरण से:

class Article(models.Model):
    title = models.CharField(max_length=100)
    slug = models.SlugField(max_length=100, unique=True)

क्या आप आलसी प्रक्रिया करने के लिए आलसी हैं? चिंता न करें, यह प्लगइन आपकी मदद करेगा। Django-autoslug


8

इसके अलावा django-admin पर ऑटो स्लग। ModelAdmin में जोड़ा गया:

prepopulated_fields = {'slug': ('title', )}

यहाँ के रूप में:

class ArticleAdmin(admin.ModelAdmin):
    list_display = ('title', 'slug')
    search_fields = ('content', )

    prepopulated_fields = {'slug': ('title', )}

4

काउंटर

किसी चीज़ के लिए एक छोटा लेबल, जिसमें केवल अक्षर, संख्याएँ, अंडरस्कोर या हाइफ़न होते हैं। वे आमतौर पर URL में उपयोग किए जाते हैं। उदाहरण के लिए, एक सामान्य ब्लॉग प्रविष्टि URL में:

https://www.djangoproject.com/weblog/2008/apr/12/spring/ अंतिम बिट (वसंत) स्लग है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.