บทความนี้ต่อมาจากบทความที่แล้วนะครับ สามารถไปอ่านได้ที่ สร้างเว็บด้วย Django ตอนที่ 1
ในครั้งที่แล้วผมเขียนเกี่ยวกับการ startproject แล้วก็การทำโฮมเพจง่ายๆไปครับ สำหรับวันนี้เลยจะมาขอเพิ่มเติมอีกนิดหน่อยเพื่อให้หน้าโฮมเพจสมบูรณ์มากยิ่งขึ้น ด้วย Templates ครับ
![](https://nonthakon-blog.fly.dev/content/images/max/800/0-00ghkqcpw9pdcxtw.png)
เริ่มกันที่อะไรคือ Templates ยังจำได้มั้ยครับในครั้งที่แล้วที่เราทำฟังค์ชัน views ง่ายๆของเราโดย Response ออกมาเป็น HTML ง่ายๆ
ข้อเสียของมันหลักๆเลยคือถ้าโค้ด HTML ของเรายาวมากๆ การจะมาเขียน HTML ใน Python โดยตรงเลยคงจะเป็นอะไรที่ลำบากพอสมควร
Templates จะทำให้เรานำโค้ด HTML ข้างนอกใส่เข้าไปเป็น Response ได้
แล้วเราจะทำยังไงล่ะ? เนื่องจากว่าการจะนำ Template มาใช้นั้นจำเป็นต้องมีการตั้งค่าใน Django นิดหน่อยครับ
- ให้ไปที่ไฟล์ settings.py ในโฟลเดอร์ project
- เลื่อนหา List ที่ชื่อว่า TEMPLATES
- ในลิตส์นั้นจะมี dictionary ให้หา key ที่ชื่อ DIRS แล้วเติมไดเรคทอรีของโฟลเดอร์ที่เราต้องการใส่ไฟล์ HTML ของ templates ไป
![](https://cdn-images-1.medium.com/max/800/1*wOVdzlOqMvd5DiIQiUFqmQ.png)
ผมต้องการเก็บไฟล์ HTML ไว้ในโฟลเดอร์ templates ครับ และเนื่องจากว่าโปรเจคของผมตั้งอยู่ที่ E:\project
ดังนั้นใน DIRS ผมจะใส่สตริงที่บอกไดเรคทอรีของผมเป็น e:\\project\\templates
เท่านี้ก็เป็นอันเสร็จการตั้งค่าครับ ทีนี้เราจะได้ใช้งานมันซักที ผมจะสร้างไฟล์ HTML อันนึงไว้ในโฟลเดอร์ templates ชื่อว่า home.html
จากนั้นก็ไปสร้าง view อันใหม่ที่จะชี้มาที่ template นี้จาก medium ที่แล้วที่ผมแนบไว้ตอนท้ายครับว่าเราไม่นิยมเขียน view ใน urls.py กัน ผมเลยสร้างไฟล์ใหม่ในโฟลเดอร์ project/project ชื่อว่า views.py ไว้สำหรับเก็บ view
![](https://cdn-images-1.medium.com/max/800/1*wOVdzlOqMvd5DiIQiUFqmQ.png)
ไฟล์ views.py ของเราจะมีฟังค์ชัน view ตัวนึงชื่อ helloWorld ซึ่งมันจะคืนค่าเป็น render(request, “home.html”)
ซึ่งตัว render นี้จะต้องรับ argument 2 ค่า 1 คือค่าที่ฟังค์ชัน view รับมา 2 คือชื่อของ template ที่เราจะ render (อ่านเพิ่มเติมที่ นี่)
ทีนี้ก็มาแก้ที่ urls.py ให้มันชี้ไปที่ view ที่เราพึ่งสร้างครับ
ผมลบฟังค์ชันที่เราประกาศในตอนที่แล้วออก จากนั้นก็ส่งฟังค์ชันที่เรา import มาจาก .views (ตัวที่เราสร้างไว้) เข้าไปแทน
ทีนี้มาลองดูผลลัพธ์ที่ได้กันครับ
![](https://nonthakon-blog.fly.dev/content/images/max/800/1-kikovx3dhya-ebprswzeaq.png)
** อีกอย่างนึงที่ผมไม่ได้บอกไว้คือวิธีการตั้งค่าใน settings.py ให้ดีขึ้นครับ เนื่องจากว่าถ้าเราส่ง directory เต็มๆของเราไปเลย หากเราต้องการย้าย directory ของมันทีหลังเราก็จำเป็นต้องมาแก้ใน settings.py ใหม่ ดังนั้นวิธีที่ดีกว่าคือการหา Root Path แล้วค่อยเอามา join กับโฟลเดอร์ที่เราต้องการเก็บในนั้นครับ
ถ้าฟังดูยากไปหน่อยก็แค่ก็อปอันนี้ไปแปะแทนเลยครับ
os.path.join(BASE_DIR, 'โฟลเดอร์ที่ต้องการเก็บ')
Medium ที่ 15
ปีนี้ผมตั้งใจว่าจะเขียน Medium ให้ได้เดือนละ 4–5 Medium ครับ สิ้นปีก็จะมี 52 Medium เท่ากับจำนวนสัปดาห์ใน 1 ปีพอดี ไม่รู้จะทำได้มั้ย แต่ก็ถือเป็น Passion เล็กๆน้อยๆของผมครับ 5555
ผมเขียนบทความหลายแนวแล้วแต่ว่าอยากเขียนยังไง ถ้าอยากให้กำลังใจช่วยกด Clap ให้ซักที สองทีด้วยนะครับ :D
เจอกันบทความหน้าครับ