วิธีที่ผมเรียนรู้เกี่ยวกับ Context Processors ใน Django

ผมกำลังสร้างร้านขายเครื่องประดับออนไลน์ด้วย Django

ผมสร้าง navbar เพื่อแสดงหมวดหมู่สินค้า ในตอนแรกผมใช้วิธี hard-code หมวดหมู่ต่างๆ ลงไป ซึ่งมันก็ใช้งานได้ดีอยู่พักหนึ่ง

จากนั้นผมก็พบปัญหา ถ้าผมเพิ่มหมวดหมู่ใหม่ ผมต้องมาคอยอัปเดต navbar ด้วยตัวเอง ซึ่งมันไม่มีประสิทธิภาพเลย

ความคิดแรกของผมคือการส่งหมวดหมู่ผ่าน context ใน view แต่ไม่นานผมก็พบปัญหาที่สอง คือทุกหน้าจำเป็นต้องมี navbar นั่นหมายความว่าผมต้องเขียนโค้ดเดิมซ้ำๆ ในทุกๆ view ซึ่งทำให้โค้ดดูรกและจัดการยาก

ผมจึงพบวิธีที่ดีกว่า นั่นคือ: Django Context Processors

Context processors ช่วยให้ข้อมูลพร้อมใช้งานในทุก templates โดยที่คุณไม่จำเป็นต้องส่งข้อมูลจากทุกๆ view

ใช้ context processors สำหรับ:

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