block extends include三者的差別跟用法
一、block定義基礎模板,在html內容中定義多個block塊,block由子模板引用同名block塊,來決定是否替換這些部分
{% block title %}一些內容,這裏可不填{% endblock %}
{% block content %}一些內容,這裏可不填{% endblock %}
{% block footer %}一些內容,這裏可不填{% endblock %}
這裏 title content footer 不是變量,名字自定義(比如你也可以寫成{% block body %})
block一般定義在base.html中,block是可以在那些繼承base的html中添加內容的區
二、子模板的引用方式
{% extends "base.html" %}
{% block title %}The current time{% endblock %}
{% block content %}<p>It is now {{ current_date }}.</p>{% endblock %}
第一句是固定的格式,必須爲模板中的第一個模板標記
extends的參數一般爲字符串,也可爲變量
可帶路徑,相對路徑,以 TEMPLATE_DIRS 的模板目錄 爲基準
子模板決定替換的block塊,無須關注其它部分,沒有定義的塊即不替換,直接使用父模板的block塊
三、引用上級代碼塊在其基礎上進行一些修改 {{ block.super }}
{% block footer %}
{{ block.super }}
AAAAA
{% endblock %}
Django模板系統——模板包含另一模板 include
使用模板加載API機制之後,可用的包含其它模板標籤
{% include 'nav.html' %}
{% include "nav.html" %}
可帶路徑,相對路徑,以 TEMPLATE_DIRS 的模板目錄 爲基準
{% include 'includes/nav.html' %}
可使用變量名
{% include template_name %}
包含的變量都會統一處理,不區分是第幾層模板
Django的{{ block.super }}模板標籤
Django模板中{{ block.super }}這個標籤非常有用,可以做到不僅僅是覆蓋父模板,而是在父模板基礎上追加內容。當然也可以覆蓋。
這就給了我們靈活性:既可以完全重寫,也可以複用父模板,也可以在複用的基礎上擴展。
二 locals() 技巧
locals()返回一個包含當前作用域裏面的所有變量和它們的值的字典
from django.shortcuts import render_to_response
import datetime
def current_datetime6(request):
current_date = datetime.datetime.now()
return render_to_response('current_datetime6.html', locals())