วิธีที่ผมเรียนรู้เกี่ยวกับ Context Processors ใน Django
ผมกำลังสร้างร้านขายเครื่องประดับออนไลน์ด้วย Django
ผมสร้าง navbar เพื่อแสดงหมวดหมู่สินค้า ในตอนแรกผมใช้วิธี hard-code หมวดหมู่ต่างๆ ลงไป ซึ่งมันก็ใช้งานได้ดีอยู่พักหนึ่ง
จากนั้นผมก็พบปัญหา ถ้าผมเพิ่มหมวดหมู่ใหม่ ผมต้องมาคอยอัปเดต navbar ด้วยตัวเอง ซึ่งมันไม่มีประสิทธิภาพเลย
ความคิดแรกของผมคือการส่งหมวดหมู่ผ่าน context ใน view แต่ไม่นานผมก็พบปัญหาที่สอง คือทุกหน้าจำเป็นต้องมี navbar นั่นหมายความว่าผมต้องเขียนโค้ดเดิมซ้ำๆ ในทุกๆ view ซึ่งทำให้โค้ดดูรกและจัดการยาก
ผมจึงพบวิธีที่ดีกว่า นั่นคือ: Django Context Processors
Context processors ช่วยให้ข้อมูลพร้อมใช้งานในทุก templates โดยที่คุณไม่จำเป็นต้องส่งข้อมูลจากทุกๆ view
ใช้ context processors สำหรับ:
- หมวดหมู่สำหรับการนำทาง (Navigation categories)
- การตั้งค่าเว็บไซต์ (Site settings)
- การแจ้งเตือนผู้ใช้ (User notifications)
- ข้อมูลตะกร้าสินค้า (Shopping cart data)
Context processor คือฟังก์ชัน Python ที่รับ request object และคืนค่ากลับมาเป็น dictionary
ตัวอย่าง:
def custom_context(request):
return {
"custom_value": "hello from context processors"
}
คุณต้องลงทะเบียนฟังก์ชันนี้ใน settings โดยเพิ่มเข้าไปในรายการ context_processors ภายใต้การตั้งค่า TEMPLATES
ตัวอย่าง:
'OPTIONS': {
'context_processors': [
'myapp.context_processors.custom_context',
],
},
ทีนี้ คุณก็สามารถใช้ข้อมูลใน templates ได้แบบนี้:
{{ custom_value }}
วิธีนี้ช่วยแก้ปัญหาของผมได้ ตอนนี้ navbar ของผมจะได้รับข้อมูลหมวดหมู่โดยอัตโนมัติในทุกๆ หน้า และผมไม่ต้องเขียนโค้ดซ้ำซ้อนอีกต่อไป
การสร้างฟีเจอร์ต่างๆ มักจะสอนแนวคิดใหม่ๆ ให้เราเสมอ สำหรับผม มันคือเรื่อง context processors
ที่มา: https://dev.to/merdas369/how-i-learned-about-context-processors-in-django-5e2h