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

1. 視圖

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

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

1.1 定義視圖

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

視圖的必須有一個參數,通常叫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錯誤。django

一條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)

打開瀏覽器刷新頁面。

相關文章
相關標籤/搜索