1. 程式人生 > >Python django 入門學習系列(二)

Python django 入門學習系列(二)

1 . 繫結 URL 與檢視函式

2 .使用Django模板系統

這裡主要是跟著追夢的教程自己一邊看著一邊用於實踐來寫的

步驟1:首先在 專案應用的目錄下建立一個 urls.py 檔案

在urls.py 中寫入:

blog/urls.py

from django.conf.urls import url

from . import views
#寫這裡的路由
urlpatterns = [
    url(r'^$', views.index, name='index'),
]

注意:在專案根目錄的 blogproject\ 目錄下(即 settings.py 所在的目錄),原本就有一個 urls.py 檔案,這是整個工程專案的 URL 配置檔案。而我們這裡新建了一個 urls.py 檔案,且位於 blog 應用下。這個檔案將用於 blog 應用相關的 URL 配置。不要把兩個檔案搞混了

步驟2:編寫檢視函式

在view.py中寫入:

blog/views.py

from django.http import HttpResponse

def index(request):
    return HttpResponse("歡迎訪問我的部落格首頁!")

3 配置專案url

Django 匹配 URL 模式是在 blogproject\ 目錄(即 settings.py 檔案所在的目錄)的 urls.py 下的,所以我們要把 blog 應用下的 urls.py 檔案包含到 blogproject\urls.py 裡去,開啟這個檔案看到如下內容:

將1內容改為2:

1

blogproject/urls.py

"""
一大段註釋
"""

from django.conf.urls import url
from django.contrib import admin

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

2

- from django.conf.urls import url
+ from django.conf.urls import url, include
from django.contrib import admin

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

這裡 - 表示刪掉這一行,+ 表示新增這一行。

我們這裡匯入了一個 include 函式,然後利用這個函式把 blog 應用下的 urls.py 檔案包含了進來。此外 include 前還有一個 r”,這是一個空字串。這裡也可以寫其它字串,Django 會把這個字串和後面 include 的 urls.py 檔案中的 URL 拼接。比如說如果我們這裡把 r” 改成 r’blog/’,而我們在 blog.urls 中寫的 URL 是 r’^$’,即一個空字串。那麼 Django 最終匹配的就是 blog/ 加上一個空字串,即 blog/。

使用Django模板系統

1 在manage.py同級目錄下新建一個templates資料夾或者包都可以,這並不影響。

2 在templates資料夾下可以新建一個blog資料夾在其下新建一個index.html

注意:再一次強調 templates\ 目錄位於專案根目錄,而 index.html 位於 templates\blog 目錄下,而不是 blog 應用下,如果弄錯了你可能會得到一個TemplateDoesNotExist 異常。如果遇到這個異常,請回來檢查一下模板目錄結構是否正確。

3 . index.html的寫法:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>{{ title }}</title>
</head>
<body>
<h1>{{ welcome }}</h1>
</body>
</html>

其中這裡的title,welcome,是django規定的語法,主要是從views.py裡面傳參過來。

4 設定settings.py裡面的模板路徑

在 settings.py 檔案裡設定一下模板檔案所在的路徑。在 settings.py 找到 TEMPLATES 選項

blogproject/settings.py

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [],
        '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',
            ],
        },
    },
]


其中 DIRS 就是設定模板的路徑,在 [] 中寫入 os.path.join(BASE_DIR, 'templates'),即:

設定為:
blogproject/settings.py

TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        ...
    },
]

5 把檢視再修改一下:

blog/views.py

from django.http import HttpResponse
from django.shortcuts import render

def index(request):
    return render(request, 'blog/index.html', context={
                      'title': '我的部落格首頁', 
                      'welcome': '歡迎訪問我的部落格首頁'
                  })

這裡我們不再是直接把字串傳給 HttpResponse 了,而是呼叫 Django 提供的 render 函式。這個函式根據我們傳入的引數來構造 HttpResponse。
我們首先把 HTTP 請求傳了進去,然後 render 根據第二個引數的值 blog/index.html 找到這個模板檔案並讀取模板中的內容。之後 render 根據我們傳入的 context 引數的值把模板中的變數替換為我們傳遞的變數的值,{{ title }} 被替換成了 context 字典中 title 對應的值,同理 {{ welcome }} 也被替換成相應的值。

最後再瀏覽器中輸入地址,我們就可以看到我們想要的程式碼了。