Django框架(四):視圖、模板


1. 視圖

后台管理頁面做好了,接下來就要做公共訪問的頁面了。當我們剛剛在瀏覽器中輸入http://127.0.0.1:8000/admin/之后,瀏覽器顯示出了后台管理的登錄頁面,那么服務器是如何找到這個頁面並返回的呢。/admin/是我們想要請求的頁面,服務器在收到這個請求之后,就一定對應着一個處理動作,這個處理動作就是幫我們產生頁面內容並返回回來,這個過程是由視圖來做的。

對於django的設計框架MVT,用戶在URL中請求的是視圖,視圖接收請求后進行處理,並將處理的結果返回給請求者。

1.1 定義視圖

視圖就是一個Python函數,它接受Web請求並且返回Web響應。響應可以是一張網頁的HTML內容,一個重定向,一個404錯誤,一個XML文檔,或者一張圖片. . . 是任何東西都可以。無論視圖本身包含什么邏輯,都要返回響應。代碼寫在哪里也無所謂,只要它在你的Python目錄下面。為了將代碼放在某處,約定是將視圖放置在項目或應用程序目錄中的名為views.py的文件中。

視圖的必須有一個參數,一般叫request,視圖必須返回HttpResponse對象,HttpResponse中的參數內容會顯示在瀏覽器的頁面上。

打開booktest/views.py文件,定義視圖index:

from django.http import HttpResponse

def index(request):
    return HttpResponse("index")

1.2 配置URLconf

請求者在瀏覽器地址欄中輸入url,請求到網站后,獲取url信息,然后與編寫好的URLconf逐條匹配,如果匹配成功則調用對應的視圖函數,如果所有的URLconf都沒有匹配成功,則返回404錯誤。

一條URLconf包括url規則、視圖兩部分:

  • url規則使用正則表達式定義。
  • 視圖就是在views.py中定義的視圖函數。

需要兩步完成URLconf配置:

  • 1.在應用中定義URLconf
  • 2.包含到項目的URLconf中

在booktest/應用下創建urls.py文件:

from django.conf.urls import url
from booktest import views
urlpatterns = [
    url(r'^$', views.index),
]

djangotest/urls.py文件修改代碼如下:

from django.contrib import admin
from django.urls import path
from django.conf.urls import include, url

urlpatterns = [
    path('admin/', admin.site.urls),
    url(r'^', include('booktest.urls')),
]

1.3 請求訪問

視圖和URLconf都定義好了,接下來先啟動服務器。

python manage.py runserver

然后在瀏覽器地址欄中輸入網址:

http://127.0.0.1:8000/

網頁顯示效果如下圖,視圖被成功執行了。

2. 模板 

在Django中,將前端的內容定義在模板中,然后再把模板交給視圖調用,各種漂亮、炫酷的效果就出現了。

 

為什么要使用模板呢?

  • 對頁面設計進行的任何改變都必須對Python代碼進行相應的修改。 站點設計的修改往往比底層Python代碼的修改要頻繁得多,因此如果可以在不進行Python代碼修改的情況下變更設計,那將會方便得多。

  • Python代碼編寫和HTML設計是兩項不同的工作,大多數專業的網站開發環境都將他們分配給不同的人員(甚至不同部門)來完成。 設計者和HTML/CSS的編碼人員不應該被要求去編輯Python的代碼來完成他們的工作。

  • 程序員編寫Python代碼和設計人員制作模板兩項工作同時進行的效率是最高的,遠勝於讓一個人等待另一個人完成對某個既包含 Python又包含 HTML 的文件的編輯工作。

基於這些原因,將頁面的設計和Python的代碼分離開會更干凈簡潔更容易維護。

2.1 創建模板

為應用booktest下的視圖index創建模板index.html。

設置查找模板的路徑:打開djangotest/settings.py文件,設置TEMPLATES的DIRS值。

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

2.2 定義模板

templtes/booktest/index.html文件:

<html>
    <head>
        <title>圖書列表</title>
    </head>
    <body>
        <h1>{{title}}</h1>
        {%for i in list%}
        {{i}}<br>
        {%endfor%}
    </body>
</html>

在模板中輸出變量語法如下,變量可能是從視圖中傳遞過來的,也可能是在模板中定義的。

{{變量名}}

在模板中編寫代碼段語法如下:

{%代碼段%}

2.3 視圖調用模板

打開booktest/views.py文件,調用上面定義的模板文件:

from django.shortcuts import render

def index(request):
    context = {'title': '圖書列表', 'list': range(10)}
    return render(request, 'booktest/index.html', context)

打開瀏覽器刷新頁面。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM