Django Templates的設置

1,為什么要有模板

從一個簡單的例子開始,我們要網(wǎng)頁上顯示當前時間,視圖的中函數(shù)如下:

def current_datetime(request):
    now = datetime.datetime.now()
    html = "<html><body>It is now %s.</body></html>" % now
    return HttpResponse(html)

很顯然這段代碼看起來有點怪
使用模板大致有以下幾個優(yōu)點:

  • 將業(yè)務邏輯的Python代碼和頁面設計的HTML代碼分離
  • 使代碼更干凈整潔更容易維護
  • 使Python程序員和HTML/CSS程序員分開協(xié)作尖滚,提高生產(chǎn)的效率
  • 將HTML代碼分離出來彤叉,使其能夠復用

2,Django中怎么使用模板

當我們新建完project狈究,新建完app俘枫,設置完settings.py和urls.py后钟病,我把HTML文件放在哪里地方返吻,也就是templates目錄應該放在哪個地方姑子,通常有兩種方式:

  • 在應用的目錄下新建templates
  • 在工程的目錄下新建templates

3,應用下新建templates

這是Django默認的方式,意思就是一個應用會自動到本應用目錄下的templates目錄搜索html文件测僵,或者說html文件對本應用的視圖函數(shù)是透明可見的街佑,不需要再去在settings.py設置TEMPLATE_DIRS,Django 1.8以上的版本做了顯示的說明

TEMPLATES = [
  {
    'BACKEND': 'django.template.backends.django.DjangoTemplates',
    'APP_DIRS': True,
  },
]

例如我的工程是website谢翎,應用是blog,目錄結構如下:

fage:website$ tree
.
├── blog
│   ├── admin.py
│   ├── admin.pyc
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── migrations
│   │   ├── __init__.py
│   │   └── __init__.pyc
│   ├── models.py
│   ├── models.pyc
│   ├── templates
│   │   └── index.html
│   ├── tests.py
│   ├── urls.py
│   ├── urls.pyc
│   ├── views.py
│   └── views.pyc
├── db.sqlite3
├── manage.py
└── website
    ├── __init__.py
    ├── __init__.pyc
    ├── settings.py
    ├── settings.pyc
    ├── urls.py
    ├── urls.pyc
    ├── wsgi.py
    └── wsgi.pyc

views.py視圖函數(shù)如下:

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def blog_index(request):
    content = {
    'test' : 'just for test.',
    'welcome': 'hello word'
    }
    return render(request, 'index.html', content)

index.html文件如下:

<p> {{ test }}</p>
<p> {{ welcome }} </p>

運行web服務器沐旨,就能在網(wǎng)頁上顯示對應的內(nèi)容
在上面的基礎上森逮,通常還在temlates目錄下新建一個同名app(名字可以不一樣)的目錄,主要將基礎模板文件base.html放在外層
目錄結構如下:

fage:blog$ tree templates/
templates/
├── base.html
└── blog
    └── index.html
1 directory, 2 files

之前的目錄結構是

fage:blog$ tree templates/
templates/
└── index.html
0 directories, 1 file
fage:blog$ 

這時就要將views.py文件稍作修改:

from django.shortcuts import render
from django.http import HttpResponse
# Create your views here.
def blog_index(request):
    content = {
    'test' : 'just for test.',
    'welcome': 'hello word'
    }
    return render(request, 'blog/index.html', content)

總之一句話,app的views.py能夠自動識別當前所有目錄下templates目錄下的文件磁携,不要出現(xiàn)app的templates目錄下出現(xiàn)同名文件褒侧,否則,有的不能識別谊迄,但不能遞歸識別闷供,需要加上子目錄的名字。
templates設置的相關參考:
VASKS
知乎

4,工程目錄下設置templates

這種方式也比較常見统诺,但是需要在settings.py中指定目錄歪脏,不要忘了后面的逗號

TEMPLATE_DIRS = (
    os.path.join(BASE_DIR,'templates'),
)

當然使用絕對路徑也可以,只不過靈活性差一些粮呢,當別人使用你的工程時婿失,需要做一些調(diào)整,因為目錄結構不一樣

TEMPLATE_DIRS = (
    '/home/django/website1/templates',
)

這樣當我們新建多個app的時候啄寡,/home/django/website1/templates目錄下的html文件對任何一個視圖函數(shù)來說都是透明的豪硅,例如:

fage:website1$ tree
.
├── account
│   ├── admin.py
│   ├── __init__.py
│   ├── migrations
│   │   └── __init__.py
│   ├── models.py
│   ├── tests.py
│   └── views.py
├── blog
│   ├── admin.py
│   ├── admin.pyc
│   ├── __init__.py
│   ├── __init__.pyc
│   ├── migrations
│   │   ├── __init__.py
│   │   └── __init__.pyc
│   ├── models.py
│   ├── models.pyc
│   ├── tests.py
│   ├── urls.py
│   └── views.py
├── db.sqlite3
├── manage.py
├── templates
│   ├── article.html
│   ├── base.html
│   └── login.html
└── website1
    ├── __init__.py
    ├── __init__.pyc
    ├── settings.py
    ├── settings.pyc
    ├── urls.py
    ├── urls.pyc
    ├── wsgi.py
    └── wsgi.pyc

這是temlates目錄下的三個html文件對account和blog應用來說都是可見的,從三個文件來看挺物,我們就知道base.html文件是基礎模板舟误,是account和blog都要用的文件,而login.html文件是account應用對應視圖要用到的文件姻乓,article.html是blog應用對應視圖要用的文件嵌溢,在上面的基礎上,通常我還需要對templates目錄的文件結構做一次調(diào)整蹋岩,新建blog目錄赖草,新建account目錄

fage:website1$ tree templates/
templates/
├── account
│   └── article.html
├── base.html
└── blog
    └── login.html
2 directories, 3 files
最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市剪个,隨后出現(xiàn)的幾起案子秧骑,更是在濱河造成了極大的恐慌,老刑警劉巖扣囊,帶你破解...
    沈念sama閱讀 218,941評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件乎折,死亡現(xiàn)場離奇詭異,居然都是意外死亡侵歇,警方通過查閱死者的電腦和手機骂澄,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,397評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來惕虑,“玉大人坟冲,你說我怎么就攤上這事磨镶。” “怎么了健提?”我有些...
    開封第一講書人閱讀 165,345評論 0 356
  • 文/不壞的土叔 我叫張陵琳猫,是天一觀的道長。 經(jīng)常有香客問我私痹,道長脐嫂,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,851評論 1 295
  • 正文 為了忘掉前任紊遵,我火速辦了婚禮账千,結果婚禮上,老公的妹妹穿的比我還像新娘癞蚕。我一直安慰自己蕊爵,他們只是感情好辉哥,可當我...
    茶點故事閱讀 67,868評論 6 392
  • 文/花漫 我一把揭開白布桦山。 她就那樣靜靜地躺著,像睡著了一般醋旦。 火紅的嫁衣襯著肌膚如雪恒水。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,688評論 1 305
  • 那天饲齐,我揣著相機與錄音钉凌,去河邊找鬼。 笑死捂人,一個胖子當著我的面吹牛御雕,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播滥搭,決...
    沈念sama閱讀 40,414評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼酸纲,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了瑟匆?” 一聲冷哼從身側響起闽坡,我...
    開封第一講書人閱讀 39,319評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎愁溜,沒想到半個月后疾嗅,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,775評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡冕象,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年代承,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片渐扮。...
    茶點故事閱讀 40,096評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡次泽,死狀恐怖穿仪,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情意荤,我是刑警寧澤啊片,帶...
    沈念sama閱讀 35,789評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站玖像,受9級特大地震影響紫谷,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜捐寥,卻給世界環(huán)境...
    茶點故事閱讀 41,437評論 3 331
  • 文/蒙蒙 一笤昨、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧握恳,春花似錦瞒窒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,993評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至束昵,卻和暖如春拔稳,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背锹雏。 一陣腳步聲響...
    開封第一講書人閱讀 33,107評論 1 271
  • 我被黑心中介騙來泰國打工巴比, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人礁遵。 一個月前我還...
    沈念sama閱讀 48,308評論 3 372
  • 正文 我出身青樓轻绞,卻偏偏與公主長得像,于是被迫代替她去往敵國和親佣耐。 傳聞我的和親對象是個殘疾皇子政勃,可洞房花燭夜當晚...
    茶點故事閱讀 45,037評論 2 355

推薦閱讀更多精彩內(nèi)容