Write More View
ตรงนี้จะเป็นการสร้างส่วนแสดงผลเเพิ่มเติมจากเดิม โดยจะเพิ่มโค้ดส่วนนี้เข้าไปใน views.py
และทำการกำหนดการเรียกใช้ผ่านทาง url ใน urls.py ด้วย โดยส่วนที่เป็น (?P<question_id>[0-9]+) หมายถึงว่าจะมีการส่งค่า question_id ไปให้เมธอดด้วย ซึ่งไปจะมีรูปแบบตาม Regular Expression ที่กำหนดไว้ ในที่นี้ก็คือต้องเป็นตัวเลข 0-9 ตั้งแต่หนึ่งตัวขึ้นไปเท่านั้น
ผลลัพธ์
Write views that actually do something
ตรงนี้เขาจะให้ทำการแก้เมธอด index ใน views.py ให้ทำการแสดงคำถามออกมา โดยจะให้แสดงออกมาเป็น 5 คำถามที่เพิ่มไปล่าสุด
คำถามที่ได้เพิ่มไว้ทั้งหมด
ผลลัพธ์
แต่ถ้าหากอยากให้เปลี่ยนจากเวลาที่เพิ่มเป็นเรียงตามตัวอักษรก็สามารถทำได้ โดยการแก้จาก '-pub_date' เป็น 'question_text' (เครื่องหมายลบด้านหน้าคือ รูปแบบการจัดเรียง โดยปกติหากไม่ใส่เครื่องหมายลบจะเรียงจาก อันดับแรกไปอันดับสุดท้ายหรือล่าสุด เช่น A-Z เก่า-ใหม่ หากใส่เครื่องหมายลบเข้าไปก็จะเรียงลำดับในทางตรงกันข้าม) ซึ่งเจ้า pub_date และ question_text ก็จะมาจากตัวแปรใน model.py นั่นเอง
ถัดมาก็จะทำการสร้างไฟล์ html เพื่อมาใช้เป็น template ในการแสดงผลกัน เริ่มจาก
- สร้างโฟลเดอร์ templates ใน polls
- สร้างโฟลเดอร์ polls ใน templates
- สร้างไฟล์ index.html ใน polls ที่อยู่ใน templates
จากนั้นก็ทำการเรียกใช้ template ใน views.py
ผลลัพธ์
ตรงนี้จะเป็นการทำให้การเขียนโค้ดง่ายและสั้นขึ้นโดยการนำ render() เข้ามาใช้ ซึ่งจะสามารถส่งที่อยู่ของตัว template ให้กับ render ได้เลย ไม่ต้องโหลดมาเก็บไว้ในตัวแปร
Raising a 404 error
ตรงนี้เป็นการทำหน้า error หากเปิดไปหน้าที่ไม่มีอยู่ โดยจะใช้ get_object_or_404() เข้ามาช่วย
สร้าง template ของหน้า detail
ผลลัพธ์
Use the template system
เป็นการปรับปรุงหน้า template detail ให้มีการแสดงส่วนของ choice ออกมา
ผลลัพธ์
Removing hardcoded URLs in templates
เป็นการแก้ส่วนที่เรียกใช้ url ตรงๆมาเป็นการเรียกใช้ผ่านทาง name ที่กำหนดไว้แทน เพื่อหากว่าเราทำการแก้ url ใน urls.py จะได้ไม่ต้องไปแก้ใน template ด้วย ขอแค่ name ยังคงเหมือนเดิมอยู่
Namespacing URL names
เป็นการกำหนดชื่อแอพในไฟล์ urls.py และตอนเรียกใช้ใน template เพื่อหากว่าภายหลังมีการเพิ่มแอพมากขึ้นไปเรื่อยๆ name ของ url อาจจะซ้ำกันได้จึงต้องระบุว่าเป็น url ของแอพไหน
~ เป็นอันจบ django tutorial ที่ 2 ~
ไม่มีความคิดเห็น:
แสดงความคิดเห็น