อัปเดตล่าสุด Nov. 17, 2023
Django คือ web framework ที่ได้รับความนิยมสูงสุดของภาษา Python บทความนี้จะเป็นการสอนสร้างโปรเจคท์และเรียนรู้การพัฒนาเว็บด้วย Django จาก 0
ก่อนที่จะไปเริ่มต้นสร้างโปรเจคท์นั้น เราจะมาทำความเข้าใจในทุก ๆ มิติที่เราควรรู้เกี่ยวกับสุดยอดเฟรมเวิร์คอันดับ 1 ของภาษาไพธอนตัวนี้กันก่อนครับ
Note: ต้องขอบอกก่อนว่าบทความนี้ยาวมาก ๆ เลยนะครับ อาจจะไม่จำเป็นต้องอ่านให้จบในครั้งเดียว โดยสามารถ bookmark เก็บไว้อ่านภายหลังได้ครับ
นี่คือตัวอย่างบริษัทที่ใช้ Django ในการพัฒนาด้าน web development
นี่คือรายชื่อแค่บางเว็บและบริษัทเท่านั้น ยังมีอีกมากมายที่ยังไม่ได้พูดถึง ถึงตอนนี้เชื่อว่าเราก็คงจะหายสงสัยในศักยภาพของ Django framework กันแล้วนะครับ
ขอแนะนำ: คอร์สเรียนและอบรม Python Web Development with Django (จัดเต็ม รับสอนทั้งแบบออนไลน์ on-site ทั้งแบบส่วนตัวและแบบกลุ่มหรือองค์กร สามารถติดต่อสอบถามผ่าน contact ในเว็บได้เลยครับ)
โดยหัวข้อที่เราจะได้เรียนในบทความนี้ เรียกได้ว่าเป็นการย่อย Django Framework มาเป็นฉบับภาษาไทย ให้เพื่อน ๆ ได้อ่านกันแบบเน้น ๆ เลยในบทความเดียว (ซึ่งผมก็ได้รวบรวมทุกสิ่งอย่างที่เราต้องรู้ในการพัฒนา Django Project โดยหัวข้อที่ภาพรวมก็จะมีดังต่อไปนี้
แนะนำ: พัฒนาเว็บด้วย Python สำหรับผู้เริ่มต้นด้วย Flask เฟรมเวิร์ค เพราะถ้าเรียน Flask มาก่อนจะทำให้เรียน Django เข้าใจและราบรื่นมากยิ่งขึ้นครับ
ก่อนที่จะเริ่มต้นสร้าง Django Project เราจะมาดูเช็คลิสต์เครื่องมือ (tools) ที่ต้องติดตั้งหรือต้องมีพร้อมก่อนเรียนครับ
ก่อนอื่นจำเป็นต้องสร้าง Virtual Environment ขึ้นมาก่อน เพื่อที่เวลาเราติดตั้ง packages หรือ libraries ต่าง ๆ จะถูกเก็บอยู่ใน folder นั้น ๆ เวลานำไปแชร์ให้คนอื่นหรือใช้งานต่อก็จะไม่เกิดปัญหาต่าง ๆ เช่น version ไม่ตรงกันเป็นต้น
อ่านเพิ่มเติม: Python Virtual Environment คืออะไร?
เริ่มต้นสร้าง Virtual Environment
ก่อนที่จะสร้าง Virtual Environment อันดับแรกให้สร้างโฟลเดอร์เพื่อเก็บโปรเจคท์ของเราเสียก่อน ด้วยคำสั่ง
$ mkdir mu_web
$ cd mu_web
จากนั้น create และ activate Virtual Environment
สำหรับ Windows
$ python -m venv env
$ env\Scripts\activate
สำหรับ macOS และ Linux
$ python3 -m venv env
$ source env/bin/activate
หลังจากสร้างโฟลเดอร์เพื่อเก็บโปรเจคท์พร้อมทั้ง Virtual Environment เสร็จสรรพแล้ว ต่อมาเราจะมาสร้าง Django project กันจริง ๆ จัง ๆ แล้วครับ โดยสิ่งที่เราต้องทำ 2 สิ่งแรกคือ start project และ start app ครับ โดยเราจะสร้างโปรเจคท์ที่มีชื่อว่า mysite และแอพที่มีชื่อว่า blog เพื่อทำแอพบล็อกนั่นเองครับ
ติดตั้ง Django
ติดตั้ง Django ด้วยคำสั่งดังต่อไปนี้ (Django จะติดตั้งเวอร์ชันล่าสุด ปัจจุบันคือเวอร์ชัน 4.2 ให้)
$ pip install django
เช็ค Django Version
$ python -m django --version
หรือเลือกติดตั้ง Django ด้วยการกำหนดเวอร์ชัน
$ pip install django==3.2.6
Start Django project
สร้างโปรเจคท์ django-admin startproject ตามด้วยชื่อโปรเจคท์คือ mysite
$ django-admin startproject mysite .
Start Django App
สร้างแอปโดยใช้คำสั่ง python manage.py startapp ตามด้วยชื่อแอพ blog
$ cd mysite
$ python manage.py startapp blog
Django Model คือส่วนหลังบ้านที่ต้องติดต่อหรือปฎิสัมพันธ์กับฐานข้อมูล จาก Django MTV ไดอะแกรมด้านล่างจะเห็นภาพชัดเจนมากขึ้น
Django MTV
แต่ก่อนที่จะไปทำความรู้จัก Model ต่อ ผมจะขออธิบายเกี่ยวกับ Django MTV หรือ MVT
MTV คือ Design Patterns ของ Django เรียกได้ว่าเป็นแนวคิด (concept) ที่สำคัญของเฟรมเวิร์คตัวนี้เลยครับ ถ้าเราเข้าใจหลักการนี้ เราจะมองภาพรวมและใช้งาน Django ได้อย่างเข้าใจมากยิ่งขึ้น โดยความหมายของแต่ละคำจะเป็นดังต่อไปนี้
เมื่อเข้าใจการทำงานของ Django Model จากภาพด้านบแล้วที่จะเป็นส่วนที่ปฎิสัมพันธ์กับฐานข้อมูล เช่นในตอนนี้เราจะสร้างตารางเพื่อเก็บข้อมูล ก็สามารถทำได้ใน models.py ได้เลย โดยทำการสร้างตารางขึ้นมา 1 ตาราง ชื่อว่า Post
อย่างที่ทราบว่า ปกติการสร้างตารางแบบนี้เราต้องเขียนภาษา SQL แต่ Django จะใช้ภาษาไพธอนเพื่อสร้างตารางและติดต่อกับฐานข้อมูลได้เลย โดยอยู่ในคอนเซ็ปต์ ORM (Object Relational Mapping)
อ่านเพิ่มเติมเกี่ยวกับ Django ORM
โดยทำการสร้าง class (ตาราง) ที่มีชื่อว่า Post โดยตารางนี้จะเก็บข้อมูลดังต่อไปนี้
ID | Title | Body |
1 | Django 101 | Django is ..... |
2 | Basic Python | Learning Python ... |
จากนั้นมาที่ไฟล์ models.py เพื่อเขียนคลาสเพื่อสร้าง Model (ตาราง) ได้เลยครับ
# blog/models.py
from django.db import models
class Post(models.Model):
title = models.CharField(max_length=120)
post = models.TextField()
date_created = models.DateTimeField(auto_now_add=True)
date_updated = models.DateTimeField(auto_now=True)
def __str__(self):
return self.title
เมื่อสร้าง model เรียบร้อยแล้ว จากนั้นจะเป็นการคอนฟิกฐานข้อมูล โดยเราใช้ตัว default database ที่มีมาให้ใน Django เรียบร้อยนั่นก็คือ SQLite3 ซึ่งเมื่อทำการ migrate จะได้ไฟล์ db.sqlite3 ซึ่งเก็บข้อมูลในรูปแบบ text file
# settings.py
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.sqlite3',
'NAME': os.path.join(BASE_DIR, 'db.sqlite3'),
}
}
ทำการรีจิสเตอร์แอพโดยไปที่ settings.py ในตัวแปร INSTALLED_APPS ทำการเพิ่มแอพ blog เข้าไป
Note: เวลาเราเพิ่มแอพเข้ามาในโปรเจคท์ จะต้องมารีจิสเตอร์แอพของเราที่ตัวแปรนี้ทุกครั้ง
# settings.py
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'blog', # New
]
ตอนนี้ใน Django project ของเรามีตารางต่าง ๆ ที่ใช้เก็บข้อมูลในแอพของเราพร้อมใช้แล้ว แต่ว่าตารางเหล่านี้จะยังไม่ได้อยู่ในฐานข้อมูลจริง ๆ และยังใช้งานไม่ได้ คราวนี้ก็จะเป็นขั้นตอนที่เรียกว่า "Migrations" และ "Migrate" ถ้าแปลแบบดิบ ๆ คือเราจะอพยพฐานข้อมูลของเราจากโค้ดเข้าไปในฐานข้อมูลจริง ๆ ให้เราได้ใช้
โดย Django จะมี 2 คำสั่งในขั้นตอนนี้คือ
จากนั้นรันคำสั่งเพื่ออัพเดตฐานข้อมูล โดยใช้คำสั่ง makemigrations
$ python manage.py makemigrations
ขั้นตอนสุดท้ายคือ migrate
$ python manage.py migrate
เป็นอันเสร็จสิ้นขั้นตอนในส่วนของ Database
View จะเป็นส่วนที่ใช้สำหรับเขียนฟังก์ชันต่าง ๆ และจัดการเกี่ยวกับการ request/response รวมไปถึงการ render หน้า HTML ออกไปแสดงผล รวมไปดึงการ query ข้อมูลมาจากฐานข้อมูลเป็นต้น
Django MTV (View)
สรุปหน้าที่ของ View
โดยผมจะให้เข้าใจ View ในเบื้องต้นแบบนี้ก่อนครับ จะได้ไม่สับสน
จากนั้นเราจะสร้างฟังก์ชันขึ้นมา 2 ฟังก์ชันใน views.py โดยฟังก์ชัน home() จะเป็นหน้า Homepage และยังดึงข้อมูลของทุกโพสต์มาแสดงหน้านี้ ส่วนฟังก์ชัน post_detail() จะใช้แสดงรายละเอียดของแต่ละโพสต์
# blog/views.py
from django.shortcuts import render
from django.http import HttpResponse
from .models import Post
def home(request):
posts = Post.objects.all()
return render(request, 'blog/home.html', {
'posts': posts
})
def post_detail(request, post_id):
post = Post.objects.get(id=post_id)
return render(request, 'blog/post-detail.html', {
'post': post
})
posts = Post.objects.all()
return render(request, 'blog/home.html', {
'posts': posts
})
Note: ข้อมูลที่รีเทิร์นออกไปจะเป็นแบบ dictpost = Post.objects.get(id=post_id)
โดย post_id ก็คือค่า URL พารามิเตอร์ที่เรากำหนดไว้ภายในฟังก์ชันนั่นเอง เพื่อรับค่า ID จาก URL URL (Uniform Resource Locator) คือที่อยู่ของหน้าเว็บหน้านั้น ๆ โดยแต่ละหน้าเว็บก็จะมี URL ที่แตกต่างกันออกไป ซึ่งการออกแบบ URL ก็เป็นอีกส่วนสำคัญของการพัฒนาเว็บไซต์ โดยเรามาดูโครงสร้างของ Django URLs กันครับว่าเป็นอย่างไรบ้าง
ทำการกำหนด route ใหักับ App เสมือนเป็นการ register แอปของเราเข้ามาในโปรเจคท์ โดยทำการอิมพอร์ตคำสั่ง include และ blog.urls
# mysite/urls.py
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('', include('blog.urls')), # App
path('admin/', admin.site.urls),
]
ทำการกำหนด route ใหักับ App เพื่อ map เข้ากับฟังก์ชันต่าง ๆ ที่เขียนไว้ใน views.py
โดยสร้างไฟล์ URL ปกติของ App เลยก็คือ urls.py
# blog/urls.py from django.urls import path
from .views import home, post_detail
# Import these functions from views.py
urlpatterns = [ path('', views.home), path('blog/<int:post_id>', views.post_detail, name="post_detail"), ]
Django นั้นมีหน้าแอดมินมาให้เราสำเร็จเรียบร้อย ซึ่งเป็นหนึ่งในฟีเจอร์ที่โดดเด่นมาก ๆ ของ Django ดังนั้นมันจึงสะดวกสบายมาก ๆ ครับในการพัฒนาโปรเจคท์ ช่วยให้สร้างโปรเจคท์ขึ้นมาได้อย่างรวดเร็ว อ่านเพิ่มเติมได้ในบทความ Django Admin ครบ จบในบทความนี้
ตัวอย่างหน้า Django Admin
ต่อมาจะเป็นการเข้าใช้งานหน้าแอดมิน โดยทำการรีจิสเตอร์ Django Model เพื่อให้แสดงผลบนหน้าแอดมิน โดยทำการอิมพอร์ต Post เข้ามา และทำการส่งเข้าไปในฟังก์ชัน admin.site.register()
# blog/admin.py
from django.contrib import admin
from .models import Post
admin.site.register(Post)
ก่อนที่จะเข้าใช้งานหน้าแอดมินได้ เราจะต้องสร้างบัญชีผู้ใช้งานเสียก่อน โดยขั้นตอนนี้เราจะเรียกว่า "Create Superuser" โดย superuser นี้จะมีสิทธิทุกอย่างสูงสุดในหน้าแอดมิน ไม่ว่าจะเป็นการ
ทำการสร้าง Superuser โดยใช้คำสั่ง
$ python manage.py createsuperuser
จากนั้นทำการใส่ username, email และ password ที่ต้องการ เป็นอันเสร็จสิ้้นขั้นตอนการสร้าง Superuser ด้านล่างคือตัวอย่างการสร้าง Superuser
$ username: sonny
$ email: [email protected]
$ password: ********
$ password (again): ********
$ Superuser created successfully.
Templates คือโฟลเดอร์ที่ใช้เก็บ HTML ไฟล์ เพื่อที่จะให้ views สามารถ render หน้า HTML ออกไปแสดงผลได้
สร้างไฟล์ HTML ขึ้นมาใหม่ 2 ไฟล์ นั่นก็คือ home.html และ post-detail.html ซึ่งจะถูกเก็บอยู่ในโฟลเดอร์ templates/ และ blog เป็นโฟลเดอร์สุดท้าย ตามลำดับ ซึ่งนี่คือ Best Practice ในการวาง HTML Path สำหรับ Django
Django Templates Path
blog/
templates/
blog/
home.html
post-detail.html
admin.py
models.py
views.py
...
ทำการ loop ข้อมูลในตัวแปร ที่เราส่งออกมาจาก views เพื่อแสดงผล
{% for post in posts %} ... {% endfor %}
โดยการแสดงผลตัวแปรของ Python ใน HTML จะอยู่ในรูปแบบ Django Template Tags โดยจะอยู่ในรูปแบบปีกกาเปิดปิดคู่
{{ post.title }}
อันนี้คือแสดง title ของบทความ
ในส่วนที่เป็น URL เราจะใช้รูปแบบนี้ ซึ่ง URL_NAME นั้นเราได้กำหนดไว้ใน blog/urls.py
{% url 'URL_NAME' post.id %}
จะได้
<a href="{% url 'post_detail' post.id %}">{{ post.title }}</a>
<!--blog/home.html-->
<!DOCTYPE html>
<html>
<head>
<title>Home | DH</title>
</head>
<body>
<h1>Hello, Django Tutorial</h1>
{% for post in posts %}
<ul>
<li><a href="{% url 'post_detail' post.id %}">{{ post.title }}</a></li>
</ul>
{% endfor %}
</body>
</html>
ในส่วนของ post-detail.html ไม่ต้อง for loop ออกมาเหมือนหน้า home เพราะว่า post ถูกส่งออกมาจาก views ของแต่ละโพสต์อยู่แล้ว สามารถแสดงผลได้เลย
<!-- blog/post-details.html-->
<!DOCTYPE html>
<html>
<head>
<title>{{ post.title }} | DH</title>
</head>
<body>
<h1>Title: {{ post.title }}</h1>
<p>Body: {{ post.body }}</p>
</body>
</html>
รันเซิร์ฟเวอร์
$ python manage.py runserver
เข้าดูที่ URL http://127.0.0.1:8000/ จะได้หน้า Homepage ตามภาพด้านล่าง ซึ่งตอนนี้ยังไม่มีโพสต์ใด ๆ แสดง เพราะว่ายังไม่ได้สร้างโพสต์นั่นเอง
เราสามารถที่จะทดสอบสร้างโพสต์ขึ้นมาโดยที่ไม่ต้องเข้าผ่านหน้า Django Admin ซึ่งจะทำให้สามารถทดสอบ เพิ่มและดึงข้อมูลได้อย่างรวดเร็ว โดยสามารถทำผ่าน Django Shell ได้ทันที
ใช้งาน Shell โดยรันคำสั่ง
$ python manage.py shell
อิมพอร์ต Post เข้ามาใช้งาน
>>> from blog.models import Post
ทดสอบดึงข้อมูลมาแสดงผล โดยเข้าถึงผ่านออปเจคท์ นั่นก็คือตัวแปร obj ที่ได้สร้างไว้ก่อนหน้า
>>> Post.objects.all()
<QuerySet [<Post: Django 101>, <Post: Python Programming>, <Post: Web Development>]>
เสร็จแล้วใช้คำสั่ง exit() เพื่อออกจาก Shell
>>> exit()
ลองใช้งาน Shell ผ่าน IPython จะได้ดูง่ายสบายตามากยิ่งขึ้น
$ pip install ipython
เข้าใช้งาน Django Shell ลองดูอีกครั้ง
$ python manage.py shell
อิมพอร์ตตาราง Post เข้ามาใช้งาน
In [1]: from blog.models import Post
จะเห็นว่าตอนนี้หน้า Shell ของเราดูสวยงาม สบายตา น่าใช้กว่าเดิมแล้ว
In [1]: from blog.models import Post In [2]: Post.objects.all() Out[2]: <QuerySet [<Post: Django 101>, <Post: Python Programming>, <Post: Web Development>]> In [3]:
Static คือ โฟลเดอร์ที่ใช้เก็บไฟล์จำพวก static files ต่าง ๆ เช่น CSS, Images, JavaScript เป็นต้น โดยโครงสร้างแทบจะเรียกได้ว่าถอดแบบมาจาก Templates หัวข้อที่ผ่านมาเป๊ะ แตกต่างกันที่ตรงประเภทของไฟล์
จะเห็นว่าใน settings.py จะ STATIC_URL มาให้ ซึ่งก็จะเอาไว้ใช้กำหนด URL ให้กับ Static files ต่าง ๆ ของเรานั่นเองครับ
STATIC_URL = 'static/'
จากภาพด้านบน จะเห็นได้ว่าเราดีไซน์ Static path เป็นแบบนี้ คล้ายกับ template เลยครับ ที่ต้องสร้างโฟลเดอร์ "templates" ส่วน Static ก็สร้างเช่นเดียวกันคือ "Static" (ไม่ต้องเติม s เหมือน templates)
Static Path
blog/
static/
blog/
styles.css # static file
admin.py
models.py
views.py
...
สร้างไฟล์ styles.css เพื่อทดสอบตกแต่งหน้าเว็บให้มีสีสัน
styles.css
body {
background-color: lightblue;
}
h1 {
color: white;
font-size: 32px;
text-align: center;
}
p {
color: white;
font-family: verdana;
font-size: 18px;
}
เสร็จแล้วอิมพอร์ตเข้ามาใช้งานกับ HTML
จาก Static path ด้านบนที่เราได้ออกแบบไว้ก่อนหน้า เราจะสามารถอิมพอร์ต Static file อย่าง CSS เข้ามาแบบนี้
...
<head>
<link rel="stylesheet" href="{% static 'blog/styles.css' %}">
...
</head>
...
จะได้ home.html
<!--home.html--> {% load static %} <!DOCTYPE html> <html> <head> <!-- Import CSS file (styles.css) into HTML --> <link rel="stylesheet" href="{% static 'blog/styles.css' %}"> <title>Home | DH</title> </head> <body> <h1>Hello, Django Tutorial</h1> {% for post in posts %} <ul> <li>
<a href="{% url 'post_detail' post.id %}">
{{ blog.title }}</a></li> </ul> {% endfor %} </body> </html>
Bootstrap คือ หนึ่งใน CSS Responsive Library ที่ได้รับความนิยมมากที่สุดในปัจจุบัน โดยผู้พัฒนาคือ Twitter ช่วยให้การทำ CSS (ตกแต่งทำเว็บให้สวยงาม) ง่ายขึ้นมาก ปัจจุบัน responsive web design ถือว่าเป็นมาตรฐานของเว็บไปแล้ว ในบทเรียนก่อนหน้าเราได้ทดสอบใช้งาน CSS เพื่อตกแต่งหน้าตาของเว็บพอคร่าว ๆ ให้รู้โครงสร้าง แต่ตอนพัฒนาจริง เพื่อไม่เป็นการเสียเวลาในการดีไซน์ เราจะใช้ Bootstrap นี่แหละครับ ดังนั้นใน Django project ของเราก็จะมีการเรียกใช้ Bootstrap กันครับ
Bootstrap Responsive (photo credit: w3school)
การติดตั้ง Bootstrap นั้นทำได้ง่ายมาก โดยติดตั้งผ่าน CDN (Content Delivery Network) ได้เลยครับ การติดตั้งแบบนี้ก็เพียงแค่ก็อปปี้ลิงก์ CDN มาไว้ภายในแท็ก <head>
ใน home.html ได้เลย โดยในบทความนี้จะใช้ Bootstrap เวอร์ชั่น 4.6 (ปัจจุบันเวอร์ชั่นล่าสุดคือ Bootstrap 5)
Bootstrap CDN (version 4.6)
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
จะได้
home.html
<head>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/[email protected]/dist/css/bootstrap.min.css" integrity="sha384-xOolHFLEh07PJGoPkLv1IbcEPTNtaed2xpHsD9ESMhqIYd0nLMwNLD69Npy4HI+N" crossorigin="anonymous">
<title>Home</title>
</head>
จากนั้นเราก็สามารถใช้งาน Bootstrap ได้เรียบร้อย ลองทดสอบใช้ Navbar (Navigation Bar) ของ Bootstrap กันได้เลย โดยนำโค้ดด้านล่างไปวางไว้ภายใน <body> แท็ก
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarSupportedContent">
<ul class="navbar-nav mr-auto">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(current)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" role="button" data-toggle="dropdown" aria-expanded="false">
Dropdown
</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Action</a>
<a class="dropdown-item" href="#">Another action</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Something else here</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link disabled">Disabled</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="Search" aria-label="Search">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Search</button>
</form>
</div>
</nav>
เมื่อลองรีเฟรชหน้าเว็บดู จะได้หน้า navigation bar สวยงามพร้อมใช้ โดยที่เราไม่ต้องเขียนโค้ดเองหรือดีไซน์เองเลยเพราะ Bootstrap ทำให้แล้ว จะได้เห็นได้ว่าสะดวกมาก ๆ ครับ
Template Inheritance คือ การสืบทอดหน้า HTML โดยทำการสร้าง base.html ไฟล์เพื่อทำหน้าที่เป็น parent file เพื่อให้หน้าเว็บเพจอื่น ๆ ได้สอบทอดไปจากหน้านี้ โดยประโยชน์ของการทำ template inheritance คือ
{% extends 'blog/base.html' %}
จะเห็นว่ามีการใช้คำสั่ง extends เพื่อบอกว่าเป็นการสืบทอด template โดยทำการสืบทอดมาจาก parent file คือไฟล์ base.html
ยังไม่จบ เดี๋ยวมาต่อครับ มีคำแนะนำส่วนไหนสามารถทักสอบถามเข้ามาที่เฟซบุ๊กเพจ devhub ได้เลยครับ
จ้างโปรแกรมเมอร์หรือนักพัฒนาสำหรับโปรเจคท์ด้าน Software Development เช่น Website, Web App, Mobile App หรือสอนโค้ดดิ้งตัวต่อตัว?
ติดต่อเรา