django搭建網站記錄二

視圖

視圖是Django應用中的一“類”網頁。它使用特定的模板,並具有特定的功能。例如,我們搭建的實驗室網站上就應該有首頁,實驗室簡介等頁面。在Django中,網頁的頁面和其他內容是由視圖負責生成的。這裏,視圖有了另外一個含義。每個視圖都是由一個簡單的Python函數表示的(對於基於類的視圖,一個視圖是用一個方法來表示的)。Django通過檢查請求的URL(準確地說,是URL裏域名之後的那部分)來選擇使用哪個視圖。Django使用叫做‘URLconfs’的配置來爲URL匹配視圖。每個URLconf負責將一種URL模式匹配(使用正則表達式)到視圖。

在第一部分我們新建了應用bigdata,在bigdata/views.py中我們編寫首頁的簡單視圖,這裏先用一句話顯示,後續再加入模板來表示。

bigdata/views.py
--------------------------------------------------------------
    from django.http import HttpResponse
    def index(request):
        return HttpResponse("here will be the homepage~")

然後爲了能夠調用這個視圖函數,我們需要將它映射到URL上,所以在bigdata應用內部創建URLConf,即新建一個bigdata/urls.py

bigdata/url.py
-----------------------------------------------------
from django.conf.urls import patterns, url

from bigdata import views


urlpatterns = patterns('',
    url(r'^$', views.index, name='index'),
)

但是,我們項目中的主URLConf還不知道應用中的URL,所以需要建立他們之間的鏈接,在labsite/urls.py中加入:

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

urlpatterns = patterns('',
    url(r'^bigdata',include('bigdata.urls')),
    url(r'^admin/', include(admin.site.urls)),
)

url各個參數的意義可以在docment中具體看。
現在我們已經告知了項目我們爲http://localhost:8000/bigdata/ 這個鏈接定義了index視圖,在瀏覽器中訪問後就會根據index視圖函數來顯示頁面的內容.

模板

下面我們開始編寫有意義的視圖,首先在應用下新建模板文件夾存放這個應用所對應的所以模板文件,組織方式如下:bigdata/templates/bigdata/index.html…
這麼組織的原因我摘下了docment翻譯文件中的部分:

組織模板文件
我們可以將我們所有的模板聚在一起,放在一個大的模板目錄下。這些模板可以運行地很好。然而,這些模板屬於投票應用,不像我們在先前教程中創建的管理站點模板一樣,我們將把它們放在應用內的模板目錄下(polls/templates)而不是項目模板目錄下(templates)。我們將在可重用的應用程序教程中詳細地講解爲什麼我們要這麼做。

在你剛剛創建的templates文件夾下,創建另一個叫做polls的文件夾,並在裏面創建一個叫做index.html的文件。換句話說,你的模板文件應該位於polls/templates/polls/index.html。由於app_directories模板加載器會像上面講到的那樣在應用文件夾下的“templates”子文件夾裏查找模板,你可以參考以上的模板文件組織方法,並在Django中使用polls/index.html來簡單地調用這個模板文件。

模板命名空間
  現在,我們可以 直接將我們的模板文件放在polls/templates文件夾中(而不是另外在這個文件夾下創建一個polls子文件夾),但是這真的不是一個好主意。Django將調用它能找到的第一個名字符合的模板文件。如果在你的不同的應用中存在着擁有相同名字的模板文件,Django將不能區分他們。使用命名空間是一個可以讓Django找到正確的模板的最簡單的方式。命名空間的具體實現方式是,將這些模板文件放在以應用的名字來命名的另一個文件夾下。
在templates中創建index.html後,修改bigdata/views.py中的index函數,(使用了快捷方式render())

from django.shortcuts import render

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

注:後面晚上代碼時注意可以使用get_object_or_404()和get_list_or_404()函數來處理異常情況

靜態文件

之前有寫過django1.7如何配置靜態文件 : link

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章