Tutorial 4
Write simple form
- use generic views - less code is better
แก้ไขไฟล์ detail.html ให้เป็นดังนี้ เพื่อทำการสร้างฟอร์มแบบสำหรับตอบแบบสอบถาม
 |
| detail.html |
- name="choice" เมื่อ submit form จะส่ง post data เป็น choice=id
- action="{% url 'polls:vote' question.id %}" เมื่อกดจะลิงก์ไปที่ url ของหน้า vote
- ค่าที่ส่งไปคือ value ซึ่งคือ choice.id
- ใช้ method="post" เมื่อต้องการเปลี่ยนแปลงข้อมูลใน server (อ้างอิงจาก tutorial)
 |
| views.py |
- request.POST['choice'] > return ค่า id ของตัวเลือกที่เลือกอยู่
- HttpResponseRedirect > simple argument > ใช้ทุกครั้งหลัง POST data
- reverse > return a string like '/polls/3/results/'
- render results.html และส่งค่า question ไป
 |
| results.html หน้าแสดงผลลัพท์จากการโหวต |
ผลลัพธ์ที่ได้
ทำการทำให้โค้ดสั้นลงโดยใช้ GenericViews
ขั้นแรกทำการแก้ไขไฟล์ urls.py โดยเปลี่ยน question_id เป็น pk เพื่อใช้กับ generic view
 |
| urls.py |
จากนั้นแก้ไขใน views.py โดยใช้ class สืบทอดจาก ListView, DetailView
DetailView ต้องการตัวแปร pk (ดังนั้นจึงเปลี่ยนใน urls.py ด้านบน จาก question_id ให้เป็น pk)
- ตัวแปร template_name ไว้กำหนด template ที่ต้องการจะ render
- ตัวแปร context_object_name ไว้กำหนดให้เหมือนชื่อตัวแปรในไฟล์ index.html ที่ต้องกำหนดเองเพราะว่า โดยปกติแล้ว DetailView จะทำการ generate context name อัติโนมัติซึ่งในที่นี้จะ generate เป็น question_list แต่ว่าใน index.html เป็นชื่อ lastest_question_list จึงต้องเปลี่ยนให้สอดคล้องกัน
- model เป็นตัวกำหนดว่าจะให้แสดงข้อมูลของ object ไหน
 |
| views.py |
ไม่มีความคิดเห็น:
แสดงความคิดเห็น