เมื่อฉันอ่านรหัส Django ฉันมักจะเห็นในรูปแบบสิ่งที่เรียกว่า "กระสุน" ฉันไม่แน่ใจว่าสิ่งนี้คืออะไร แต่ฉันรู้ว่ามันเกี่ยวข้องกับ URL กระสุนนี้ควรจะใช้อย่างไรและเมื่อไหร่?
(ฉันได้อ่านคำจำกัดความในอภิธานศัพท์นี้แล้ว)
เมื่อฉันอ่านรหัส Django ฉันมักจะเห็นในรูปแบบสิ่งที่เรียกว่า "กระสุน" ฉันไม่แน่ใจว่าสิ่งนี้คืออะไร แต่ฉันรู้ว่ามันเกี่ยวข้องกับ URL กระสุนนี้ควรจะใช้อย่างไรและเมื่อไหร่?
(ฉันได้อ่านคำจำกัดความในอภิธานศัพท์นี้แล้ว)
คำตอบ:
"กระสุน" เป็นวิธีการสร้าง 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 ของหน้าเว็บนี้เป็นอีกตัวอย่างหนึ่ง
หากฉันอาจให้บริบททางประวัติศาสตร์บางอย่าง:
คำว่า"กระสุน"เกี่ยวข้องกับการหล่อโลหะ - ตะกั่วในกรณีนี้ - ซึ่งเป็นแบบอักษรที่กด กระดาษทุกแผ่นจะมีโรงงานแบบอักษรของมันซ้ำแล้วซ้ำอีกและหล่อใหม่ในแม่พิมพ์ใหม่เนื่องจากหลังจากพิมพ์ออกมาหลายแผ่น ผู้ฝึกหัดอย่างฉันเริ่มต้นอาชีพของพวกเขาที่นั่นและไปจนถึงจุดสูงสุด (ไม่ใช่อีกต่อไป)
แบบอักษรต้องเขียนข้อความของบทความในลักษณะย้อนหลังด้วยตัวอักษรนำซ้อนกันในฉลาด ดังนั้นเวลาพิมพ์ตัวอักษรจะตรงไปบนกระดาษ นักพิมพ์ทุกคนสามารถอ่านหนังสือพิมพ์ที่มิเรอร์ได้เร็วที่สุดเท่าที่พิมพ์ ดังนั้นทาก (เช่นหอยทาก) และเรื่องราวช้า ๆ (สุดท้ายจะได้รับการแก้ไข) มีจำนวนมากบนม้านั่งรอโดยระบุเพียงจดหมายกำปั้นของพวกเขาส่วนใหญ่ทั้งชื่อมักอ่านง่าย มีข่าว "ร้อนแรง" รออยู่บนม้านั่งเพื่อแก้ไขในนาทีสุดท้าย (กระดาษเย็น) ก่อนการประชุมครั้งสุดท้ายและการพิมพ์ขั้นสุดท้าย
Django โผล่ออกมาจากสำนักงานวารสารลอเรนซ์ในแคนซัส อาจมีศัพท์แสงการพิมพ์บางอย่างที่ยังคงสะท้อนอยู่ A-Django กระตือรือร้น - & - มิตรเก่ากระสุน-boy จากฝรั่งเศส
คำว่า 'กระสุน' มาจากโลกของการผลิตหนังสือพิมพ์
มันเป็นชื่อที่ไม่เป็นทางการที่มอบให้กับเรื่องราวในระหว่างกระบวนการผลิต ในขณะที่เนื้อเรื่องของลมออกมาจากจังหวะของนักข่าว (สมมติว่าสิ่งเหล่านี้มีอยู่อีกต่อไป?) ผ่านไปยังบรรณาธิการผ่านไปยัง "แท่นพิมพ์" นี่คือชื่อที่ถูกอ้างอิงโดยเช่น "คุณแก้ไขข้อผิดพลาดเหล่านั้นใน ' เรื่องราวของเคท - วิลเลียม? "
บางระบบ (เช่น Django) ใช้กระสุนเป็นส่วนหนึ่งของ URL www.mysite.com/archives/kate-and-william
ที่จะค้นหาเรื่องที่เป็นตัวอย่าง
แม้แต่ Stack Overflow ก็ทำเช่นนี้ด้วย GEB-ish (a)การอ้างอิงตนเอง/programming/427102/what-is-a-slug-in-django/427201#427201
แม้ว่าคุณจะสามารถแทนที่กระสุนด้วยblahblah
และมันจะยังคงพบว่าไม่เป็นไร
มันอาจย้อนกลับไปเร็วกว่านั้นเนื่องจากบทภาพยนตร์มี "เส้นกระสุน" ในตอนเริ่มต้นของแต่ละฉากซึ่งโดยทั่วไปจะกำหนดฉากหลังให้กับฉากนั้น มันคล้ายกันมากกับสิ่งที่ว่าเป็นสิ่งที่นำเสนอหรือคำนำของสิ่งที่ตามมา
บนเครื่อง Linotype กระสุนเป็นชิ้นเดียวของโลหะที่สร้างขึ้นจากรูปแบบตัวอักษรของแต่ละบุคคล ด้วยการสร้างกระสุนเดี่ยวสำหรับทั้งเส้นสิ่งนี้ได้รับการปรับปรุงอย่างมากในการแต่งเพลงแบบตัวละครต่อตัวละคร
แม้ว่าสิ่งต่อไปนี้เป็นการคาดเดาที่บริสุทธิ์ทว่าความหมายแรกของทากคือเหรียญปลอม (ซึ่งจะต้องกดลงไป) ฉันสามารถจินตนาการได้ว่าการใช้งานถูกเปลี่ยนเป็นคำที่พิมพ์ (เนื่องจากกระสุนต้องถูกกดโดยใช้ตัวอักษรดั้งเดิม) และจากนั้นเปลี่ยนจากคำจำกัดความ 'ชิ้นส่วนของโลหะ' เป็นคำจำกัดความ 'สรุปเรื่องราว' จากตรงนั้นมันเป็นขั้นตอนสั้น ๆ จากการพิมพ์ที่เหมาะสมสู่โลกออนไลน์
(a) "Godel Escher, Bach" โดยDouglas Hofstadterหนึ่งคนซึ่งฉัน (อย่างน้อย) พิจารณาหนึ่งในผลงานทางปัญญาที่ยิ่งใหญ่สมัยใหม่ คุณควรตรวจสอบงานอื่น ๆ ของเขา "Metamagical Themas"
Slug เป็นคำในหนังสือพิมพ์ กระสุนเป็นฉลากสั้น ๆ สำหรับบางสิ่งซึ่งประกอบด้วยตัวอักษรตัวเลขเครื่องหมายขีดล่างหรือเครื่องหมายขีดกลางเท่านั้น โดยทั่วไปจะใช้ใน URL (เหมือนใน Django docs)
ฟิลด์กระสุนใน Django ใช้เพื่อจัดเก็บและสร้างURL ที่ถูกต้องสำหรับหน้าเว็บที่คุณสร้างขึ้นแบบไดนามิก
เช่นเดียวกับที่คุณเพิ่มคำถามนี้ใน Stack Overflow และมีการสร้างหน้าแบบไดนามิกและเมื่อคุณเห็นในแถบที่อยู่คุณจะเห็นชื่อคำถามของคุณด้วย "-" แทนที่ช่องว่าง นั่นเป็นหน้าที่ของเขตข้อมูลกระสุนอย่างแน่นอน
ชื่อที่คุณป้อนเป็นอย่างนี้ -> อะไรคือ“ กระสุน” ใน Django
ในการจัดเก็บลงในช่องกระสุนมันจะกลายเป็น "what-is-a-slug-in-django" (ดู URL ของหน้านี้)
“ Slug” เป็นคำศัพท์ในหนังสือพิมพ์ แต่ความหมายของที่นี่คือส่วนสุดท้ายของ URL ตัวอย่างเช่นโพสต์ที่มีชื่อ“ บิตเกี่ยวกับ Django” จะกลายเป็น“ บิตเกี่ยวกับ django” โดยอัตโนมัติ (แน่นอนคุณสามารถเปลี่ยนได้อย่างง่ายดายหากคุณไม่ชอบกระสุนที่สร้างขึ้นโดยอัตโนมัติ)
เป็นส่วนอธิบายของ URL ที่มีเพื่อให้เป็นคำอธิบายที่เป็นมนุษย์มากขึ้น แต่ไม่จำเป็นต้องมีเว็บเซิร์ฟเวอร์ - ใน"กระสุน" ใน Django คืออะไร? กระสุนคือ 'in-django-what-is-a-slug' แต่กระสุนไม่ได้ถูกใช้เพื่อกำหนดหน้าที่ให้บริการ (บนเว็บไซต์นี้อย่างน้อย)
Slug เป็นป้ายกำกับย่อ URL ที่เป็นมิตรสำหรับเนื้อหาที่เฉพาะเจาะจง มันมีเพียงตัวอักษรตัวเลขขีดล่างหรือยัติภังค์ ตัวบุ้งมักจะบันทึกด้วยเนื้อหาที่เกี่ยวข้องและมันจะผ่านเป็นสตริง URL
กระสุนสามารถสร้างโดยใช้ SlugField
Ex:
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
กระสุนอัตโนมัติที่ django-admin เพิ่มที่ ModelAdmin:
prepopulated_fields = {'slug': ('title', )}
ตามที่นี่:
class ArticleAdmin(admin.ModelAdmin):
list_display = ('title', 'slug')
search_fields = ('content', )
prepopulated_fields = {'slug': ('title', )}
กระสุน
ป้ายกำกับสั้น ๆ สำหรับบางสิ่งที่ประกอบด้วยตัวอักษรตัวเลขเครื่องหมายขีดล่างหรือเครื่องหมายขีดกลาง โดยทั่วไปจะใช้ใน URL ตัวอย่างเช่นใน URL รายการบล็อกทั่วไป:
https://www.djangoproject.com/weblog/2008/apr/12/spring/ บิตสุดท้าย (สปริง) คือกระสุน