網頁 App

      在〈網頁 App〉中尚無留言

有時一個網頁由好幾個 .py 檔所組成,這麼多的檔案分散在網站根目錄上就非常難管理及維護,所以就有必要使用目錄將這些 .py 檔集中管理。

使用目錄管理,那麼這個目錄就稱為網頁 App,裏面有自已的 views.py 檔,這樣就不會讓根目錄下的  views.py 愈寫愈多愈長,越難維護。

新增App

新增 App 的步驟如下

1. 建立 home app
2. 撰寫 views.py
3. 安裝home app
4. 設定網址連結

建立 app

可以手動新增目錄,但通常會用如下指令,自動在目錄下新增 views.py 檔。

python manage.py startapp home

上述指令會在專案下自動新增 home 目錄,裏面最重要的就是 views.py

d:\web
├─  venv #虛擬環境設定
├─  templates #模組目錄
│   ├─ home.html
│   ├─ travel.html
├─  home #home app目錄
│   ├─  admin.py
│   ├─  apps.py
│   ├─  models.py
│   ├─  tests.py
│   ├─  views.py

修改 views.py

home 目錄下的 views.py 就是這個 App 主要程式,此檔幾乎都是固定的,只有第三個參數傳入的變數字典要改變而以。

from django.shortcuts import render
from datetime import datetime
def html(request):
    return render(request, 'home.html',
         {'name':'Thomas','current_time': str(datetime.now()),}
    )

前一篇的HttpResponse方法是直接由 .py檔產生HttpResponse物件。

而上述的render是用來取代HttpResponse方法的。render會載入第二個參數所指定的 html 模組,並依第三個參數將變數傳入html模組內,然後產生HttpResponse物件。render的參數說明如下

第一個參數 : request: HttpRequest物件
第二個參數 : Template名稱(html名),對應於 BASE_DIR/templates 目錄
第三個參數 : 新增到 html 模組裏的變數字典,需為Dictionary格式

撰寫模板 html 網頁

在 templates 下新增 home.html

<html>
    <head>
        <meta charset="UTF-8">
        <title>Mahaljsp</title>
        <style>
            body {
               background-color: lightyellow;
            }
            em {
                color: LightSeaGreen;
            }
        </style>
    </head>
    <body>
        <h1>Hello I am {{name}}!</h1>
        <p>
            {{ current_time }}
        </p>
    </body>
</html>

請注意, {{ current_time }} ,其中的 “{{}}” 可以接收 Python 字典傳入的值並將之印出

安裝 app

本步驟似乎不用作。

在 settings.py 裏新增 ‘home’ ,另外也可以使用 ‘home.apps.HomeConfig’

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'home',
]

設定連結

更新urls.py如下

from django.contrib import admin
from django.urls import path, include
import home.views as home
import travel.views as travel
urlpatterns = [
    path('admin/', admin.site.urls),
    path('', home.html),
]

path (”, home.homl) 指只有網址時要連結的代碼,一般都是指向首頁。如果網址後有其它目錄,記得最後加上 “/”,如下

path('table9/', table.html),
#網址為 : http://xxx.ddns.net/table9/

雖說不加 ‘/’ 也可以,但建議一定要加。這是為了在 table9 之後,還有其它子網頁的原因。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *