Django Template Inheritance

   อัปเดตล่าสุด April 15, 2023

Template Inheritance คือ การสืบทอดหน้า HTML โดยทำการสร้าง base.html ไฟล์เพื่อทำหน้าที่เป็น parent file เพื่อให้หน้าเว็บเพจอื่น ๆ ได้สอบทอดไปจากหน้านี้ โดยประโยชน์ของการทำ template inheritance คือ

  • ช่วยให้ไม่ต้องเขียนโค้ดซ้ำไปซ้ำมาในส่วนที่เหมือนกัน (ลด code reduncancy) เช่น ส่วน Navbar ของเว็บจะมีเหมือนกันทุก ๆ หน้าเว็บเพจ เราก็สามารถสืบทอดจาก base.html ไปใช้ในหน้าอื่น ๆ เช่น about, contact us, etc ได้
  • ช่วยให้โค้ดอ่านง่ายขึ้น โฟกัสเฉพาะส่วนของข้อมูลที่ต้องนำมาแสดงผล


เริ่มทำ Template Inheritance

ไวยากรณ์ในการสืบทอด template จะเป็นแบบนี้

{% extends 'blog/base.html' %}

จะเห็นว่ามีการใช้คำสั่ง  extends เพื่อบอกว่าเป็นการสืบทอด template โดยทำการสืบทอดมาจาก parent file คือไฟล์   base.html 

1. สร้าง base.html (parent file)

base.html

<!DOCTYPE html>
{% load static %}
<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>{% block title %}{% endblock %}</title>
    </head>
    <body>
        <nav class="navbar navbar-expand-lg navbar-light bg-light">
           ... 
           ... 
           ...
          </nav>

          {% block content %}{% endblock %}
          
        <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/jquery.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
        <script src="https://cdn.jsdelivr.net/npm/[email protected]/dist/js/bootstrap.bundle.min.js" integrity="sha384-Fy6S3B9q64WdZWQUiU+q4/2Lc9npb8tCaSX9FK7E8HnRr0Jz8D6OP9dO5Vg3Q9ct" crossorigin="anonymous"></script>
    </body>
</html>


2. ทำการสืบทอด template ไปที่หน้าอื่น ๆ 

home.html

{% extends 'blog/base.html' %}
{% block title %}Home{% endblock %}
{% block content %}
<div class="container">
    <h1>Hello, Django</h1>
    <p>I love to learn Django framework</p>
</div>
{% endblock %}


about.html

{% extends 'blog/base.html' %}
{% block title %}About Us{% endblock %}
{% block content %}
<div class="container">
    <h1>I'm Sonny</h1>
    <p>I'm a normal guy, who loves to share Django tutorial</p>
</div>
{% endblock %}

จะเห็นว่าตอนนี้เราได้ทำ template inheritance จากไฟล์  base.html  ที่เป็น parent file  ไปที่ child files คือ  home.html  และ  about.html 




คอร์สเรียนแนะนำ