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