使用 extends include 和 blocks

摘要

  • {%extends%} :這會將作為引數給出的模板宣告為當前模板的父級。用法:{% extends 'parent_template.html' %}

  • {%block%} {%endblock%} :這用於定義模板中的部分,因此如果另一個模板擴充套件了這個部分,它將能夠替換其中編寫的任何 html 程式碼。塊由其名稱標識。用法:{% block content %} <html_code> {% endblock %}

  • {%include%} :這將在當前模板中插入模板。請注意,包含的模板將接收請求的上下文,你也可以為其提供自定義變數。基本用法:{% include 'template_name.html' %},變數用法:{% include 'template_name.html' with variable='value' variable2=8 %}

指南

假設你正在構建前端程式碼,併為所有程式碼提供通用佈局,並且你不希望為每個模板重複程式碼。Django 為你提供了內建標籤。
假設我們有一個部落格網站有 3 個共享相同佈局的模板:

project_directory
    ..
    templates
      front-page.html
      blogs.html
      blog-detail.html

1)定義 base.html 檔案,

<html>
  <head>
  </head>

  <body>
        {% block content %}
        {% endblock %}
   </body>
</html>

2)在 blog.html 中擴充套件它,就像,

{% extends 'base.html' %}

{% block content %}
    # write your blog related code here
{% endblock %}

# None of the code written here will be added to the template

這裡我們擴充套件了基本佈局,因此它的 HTML 佈局現在可以在 blog.html 檔案中使用 .{ % block %} 的概念是模板繼承,它允許你構建一個基礎骨架模板,其中包含你站點的所有常見元素並定義該子塊模板可以覆蓋。

3)現在假設你的所有 3 個模板也有相同的 HTML div,它定義了一些流行的帖子。而不是被寫入 3 次建立一個新的模板 posts.html

blog.html

{% extends 'base.html' %}

{% block content %}
    # write your blog related code here
    {% include 'posts.html' %} # includes posts.html in blog.html file without passing any data
    <!-- or -->
    {% include 'posts.html' with posts=postdata %} # includes posts.html in blog.html file with passing posts data which is context of view function returns.
{% endblock %}