python django 动态网页_使用Django创建动态页面
將 URL 映射到視圖
那么概括起來,該視圖函數返回了包含當前日期和時間的一段 HTML 頁面。但是如何告訴 Django 使用這段代碼呢?這就是 URLconfs 粉墨登場的地方了。
URLconf 就像是 Django 所支撐網站的目錄。它的本質是 URL
模式以及要為該 URL 模式調用的視圖函數之間的映射表。你就是以這種方式告訴 Django,對于這個 URL 調用這段代碼,對于那個 URL
調用那段代碼。但必須記住的是視圖函數必須位于 Python 搜索路徑之中。
Python 搜索路徑
Python 搜索路徑 就是使用 import 語句時,Python 所查找的系統目錄清單。
舉例來說,假定你將 Python 路徑設置為 ['','/usr/lib/python2.4/site-packages','/home/username/djcode/'] 。如果執行代碼 from foo import bar ,Python 將會首先在當前目錄查找 foo.py 模塊( Python 路徑第一項的空字符串表示當前目錄)。如果文件不存在,Python將查找 /usr/lib/python2.4/site-packages/foo.py 文件。如果文件也不存在,它將嘗試 /home/username/djcode/foo.py 。最后,如果 這個 文件還不存在,它將引發 ImportError 異常。
如果對了解 Python 搜索路徑值感興趣,可以啟動 Python 交互式解釋程序,輸入 import sys ,接著輸入 print sys.path 。
通常,你不必關心 Python 搜索路徑的設置。Python 和 Django 會在后臺自動幫你處理好。(如果有興趣了解的話,Python 搜索路徑的設置工作是 manage.py 文件的職能之一。)
前一章中執行 django-admin.py startproject 時,該腳本會自動為你建了一份 URLconf(即 urls.py 文件)。讓我們編輯一下這份文件。缺省情況下它是下面這個樣子:
from django.conf.urls.defaults import *
urlpatterns = patterns('',
# Example:
# (r'^mysite/', include('mysite.apps.foo.urls.foo')),
# Uncomment this for admin:
# (r'^admin/', include('django.contrib.admin.urls')),
)
讓我們逐行逐句分析一遍這段代碼:
第一行從 django.conf.urls.defaults 模塊引入了所有的對象,其中包括了叫做 patterns 的函數。
第二行調用 patterns() 函數并將返回結果保存到 urlpatterns 變量。 patterns() 函數只傳入了一個空字符串參數。其他代碼行都被注釋掉了。 (該字符串可用作視圖函數的通用前綴,但目前我們將略過這種高級用法。)
當前應該注意是 urlpatterns 變量, Django 期望能從 ROOT_URLCONF 模塊中找到它。該變量定義了 URL 以及用于處理這些 URL 的代碼之間的映射關系。
默認情況下,URLconf 所有內容都被注釋起來了——Django
應用程序還是白版一塊。(旁注:這也就是上一章中 Django 顯示“It worked!”頁面的原因。如果 URLconf 為空,Django
會認定你才創建好新項目,因此也就顯示那種信息。)
現在編輯該文件以展示我們的 current_datetime 視圖:
from django.conf.urls.defaults import *
from mysite.views import current_datetime
urlpatterns = patterns('',
(r'^time/$', current_datetime),
)
我們做了兩處修改。首先,我們從模塊 (在 Python 的 import 語法中, mysite/views.py 轉譯為 mysite.views ) 中引入了 current_datetime 視圖。接著,我們加入了 (r'^time/$', current_datetime), 這一行。該行就是所謂的 URLpattern ,它是一個 Python 元組,其第一個元素是簡單的正則表達式,第二個元素是為該模式應用的視圖函數。
簡單來說,我們只是告訴 Django,所有指向 URL /time/ 的請求都應由 current_datetime 這個視圖函數來處理。
下面是一些需要注意的地方:
注意,該例中,我們將 current_datetime 視圖函數作為對象傳遞,而不是調用它。這是 Python (及其它動態語言的) 的一個重要特性:函數是一級對象(first-class objects), 也就是說你可以像傳遞其它變量一樣傳遞它們。很酷吧?
r'^time/$' 中的 r 表示 '^time/$' 是一個原始字符串。這樣一來就可以避免
正則表達式有過多的轉義字符。
不必在 '^time/$' 前加斜杠(/)來匹配 /time/ , 因為 Django 會自動在每個表
達式前添加一個斜杠。乍看起來,這好像有點奇怪,但是 URLconfs 可能由其它的 URLconfs
所引用, 所以不加前面的斜杠可讓事情簡單一些。這一點在第 8 章中將有進一步闡述。
上箭頭 ^ 和美元符號 $ 符號非常重要。上箭頭要求表達式對字符串的頭部進行匹配,美元符號則要求表達式對字符串的尾部進行匹配。
最好還是用范例來說明一下這個概念。如果我們用 '^time/' (結尾沒有$),
那么以 time/ 開始的 任意 URL 都會匹配,比如 /time/foo 和 /time/bar ,
不僅僅是 /time/ 。同樣的,如果我們去掉最前面的 ^ ( 'time/$' ),
Django 一樣會匹配由 time/ 結束的 任意 URL /time/ ,比如
/foo/bar/time/ 。
因此,我們必須同時用上 ^ 和 $ 來精確匹配 URL /time/ 。不能多也不能少。
你可能想如果有人請求 /time 也可以同樣處理。如果 APPEND_SLASH 的
設置是 True 的話,系統會重定向到 /time/ ,這樣就可以一樣處理了。
(有關內容請查看附錄 E )
啟動Django開發服務器來測試修改好的 URLconf, 運行命令行 python manage.py runserver 。
(如果你讓它一直運行也可以,開發服務器會自動監測代碼改動并自動重新載入,所以不需要手工重啟)
開發服務器的地址是 http://127.0.0.1:8000/ ,打開你的瀏覽器訪問
http://127.0.0.1:8000/time/ 。 你就可以看到輸出結果了。
萬歲!你已經創建了第一個Django的web頁面。
正則表達式
正則表達式 (或 regexes ) 是通用的文本模式匹配的方法。Django URLconfs 允許你
使用任意的正則表達式來做強有力的URL映射,不過通常你實際上可能只需要使用很少的一
部分功能。下面就是一些常用通用模式:
符號匹配
. (dot)
任意字符
\d
任意數字
[A-Z]
任意字符, A-Z (大寫)
[a-z]
任意字符, a-z (小寫)
[A-Za-z]
任意字符, a-z (不區分大小寫)
+
匹配一個或更多 (例如, \d+ 匹配一個或
多個數字字符)
[^/]+
不是/的任意字符
*
匹配0個或更多 (例如, \d* 匹配0個
或更多數字字符)
{1,3}
匹配1個到3個(包含)
總結
以上是生活随笔為你收集整理的python django 动态网页_使用Django创建动态页面的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: windows sybase bit显示
- 下一篇: mybatis 代码生成器_spring