1. 程式人生 > >django-7.django模板繼承(block和extends)

django-7.django模板繼承(block和extends)

oct utf bubuko import contex 裏的 string 輸入 charset

前言

打開一個網站時候,點導航欄切換到不同的頁面,發現導航部分是不變的,只是頁面的主體內容變了,於是就可以寫個母模板,其它的子頁面繼承母模板就可以了。

母模板

可以在母模板中添加多個塊標簽,每個塊標簽取不同的名稱,如下格式,context是塊標簽名稱

{% block content %} {% endblock content %}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>母模板</title>
</head>
<body>
<section>
    <h1>頂部導航</h1>
    <p>python自動化-上海-悠悠</p>
    <hr>
</section>

<!--這是一段註釋。block是一個塊標簽, content是標簽名稱-->
{% block content %} {% endblock content %}

<p>---------自動化教程---------</p>


<!--這是一段註釋。block是一個塊標簽, ad是標簽名稱-->
{% block ad %} {% endblock ad %}


<section>
    <br><br><br><br><hr>
    <h1>底部導航</h1>
    <p>底部一些友情鏈接啊,網站導航,版權啊</p>
</section>
</body>
</html>

也可以給塊標簽添加默認值,如:

<!--這是一段註釋。block是一個塊標簽, 可以給默認值-->
{% block defaut %}
<p>如果子頁面中,沒填充此block內容,這裏的就是默認內容</p>
{% endblock defaut %}

子頁面

extends繼承母模板的頁面內容,填充 block塊標簽內容,指定對應的名稱就可以了。不是所有的block都需要填充,如果母模板中blcok有默認內容,子模板不填充的話,就顯示默認的內容。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>子頁面</title>
</head>
<body>

<!--這是一段註釋。extends繼承basepage.html頁面-->
{% extends "basepage.html" %}

{% block content %}
    <p>這裏是content塊的填充內容</p>
{% endblock content %}

{% block ad %}
<ul>自動化內容</ul>
    {% for i in ads %}
    <li>{{i}}</li>
     {% endfor %}
{% endblock ad %}

</body>
</html>

views與urls

上面子模板裏面有給for循環,參數是ads,在views視圖函數裏面添加context 參數
hello/views.py視圖函數

from django.shortcuts import render
from django.http import HttpResponse, Http404

# Create your views here.

def sonpage(request):
    context = {"ads": ["selenium", "appium", "requests"]
               }
    return render(request, ‘sonpage.html‘, context)

urls.py添加訪問路徑

from django.conf.urls import url
from django.urls import re_path, path
from hello import views
urlpatterns = [
    path("sonpage/", views.sonpage),
]

打開瀏覽器輸入地址:http://127.0.0.1:8000/sonpage/ 就能訪問到頁面了
技術分享圖片

備註:子模板也可以結合使用上一篇提到的include語法:

{% include ‘end.html‘ %}

django-7.django模板繼承(block和extends)