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 }} 也被替換成相應的值。
最後再瀏覽器中輸入地址,我們就可以看到我們想要的程式碼了。