iT邦幫忙

0

django入門(四) — 簡單範例(2)-範本與範本繼承

  • 分享至 

  • xImage
  •  

全部文章:
django入門(一) — 介紹與設定開發環境
django入門(二) — 建立資料庫與專案
django入門(三) — 簡單範例(1)-建立app
django入門(四) — 簡單範例(2)-範本與範本繼承
django入門(五) — 簡單範例(3)-靜態檔
django入門(六) — 資料模型與填充程式
django入門(七) — Django ORM操作

範本(Template)

範本是放HTML檔案的資料夾,Template engine(範本引擎)會把views傳來的變數插入到我們在範本內所寫的範本變數。

我們延續上一篇教學,將回傳字樣改成使用範本呈現。

修改main/views.py


from django.shortcuts import render
from django.http import HttpResponse <-這行刪除


def main(request):
    '''
    Render the main page
    '''
    context = {'hello':'Hello world! 這是首頁~'}
    return render(request, 'main/main.html', context)

main app目錄下建立 templates 與 templates/main 目錄

main/templates/main下建立範本main.html

main/templates/main/main.html 貼上下面html

<!doctype html>
<html>
<head>
<title>簡單範例</title>
<meta charset="utf-8">
</head>
<body>
<h2>{{ hello }}</h2>
</body>
</html>

完成後可以重新啟動伺服器,到瀏覽器查看成果。

範本繼承

範本繼承可以讓我們更好得管理範本,當有多個範本有相同重複的部分,我們可以將它們放到同一個範本,並定義一些區塊標籤,讓繼承這個範本的範本可以自己設定區塊標籤內的內容,如此的話,我們未來如果需要更動只要修改一個範本就好了。

首先我們建立一個基礎範本:
main/templates/main/base.html,並將下方code貼上。

<!doctype html>
{% load static %}
<html>
<head>
<title>簡單範例</title>
<meta charset="utf-8">
<link rel="stylesheet" href="{% static 'main/css/main.css' %}">
{% block css %}{% endblock %}

</head>
<body>
{% include 'main/menu.html' %}<!--  -->
<div class="p_header" align="center">
	<div class="title">
		<h2>簡單範例 -- {% block heading %}{% endblock %}</h2>
	</div>
</div>
<div class="wrapper" align="center">
	<div class="content" >
		{% block content %}{% endblock %}
	</div>
</div>


<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
{% block script %}{% endblock %}
</body>
</html>

main/templates/main/main.html的內容用下面的code蓋掉

{% extends 'main/base.html' %}
{% block heading %}首頁{% endblock %}
{% block content %}
<h2>{{ hello }}</h2>
{% endblock %}

範本匯入其它範本

我們在首頁加入一個目錄的功能。

首先,建立menu.html

main/templates/main/menu.html,將下方code貼上。

<ul id="menu">
  <li><a href="{% url 'main:main' %}">首頁</a></li>
</ul>

main/templates/main/base.html

...
<body>
{% include 'main/menu.html' %}  <-加入這行
<h2>簡單範例 -- {% block heading %}{% endblock %}</h2>
{% block content %}{% endblock %}
</body>
...

到這裡我們可以知道範本繼承達成了「高內聚,低耦合」的目的,便於開發人員日後維護。

建立第二個APP-stock

接著繼續往下,在專案下再建立一個app,名稱為stock。(記得要去demo/settings新增APP)
如果忘記怎麼建立可以參考前面的教學文章。

首先我們建立一個範本:
main/templates/stock/stock.html,並將下方code貼上。

{% extends 'main/base.html' %}
{% block heading %}股票{% endblock %}
{% block content %}
<h2>{{ stock }}</h2>
{% endblock %}

撰寫views
stock/views.py

from django.shortcuts import render


def stock(request):
    context = {'stock':'stock page'}
    return render(request, 'stock/stock.html', context)

新增一個urls.py在stock app下面,並設定路徑。

stock/urls.py

from django.urls import path
from stock import views


app_name = 'stock'
urlpatterns = [
    path('', views.stock, name='stock'),
]

還有demo/urls.py也要設定路徑哦

...
urlpatterns = [
    path('admin/', admin.site.urls),
    path('main/', include('main.urls', namespace='main')),
    path('stock/', include('stock.urls', namespace='stock')), <-加入這行
    re_path('.*', views.main),
]

測試

到這裡可以啟動伺服器了,可以看到頁面上有首頁與股票的分頁連結,且可以點擊進入頁面。


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言