templates介紹
什么是templates?
? ? templates就是HTML文件
? ? 那它與傳統(tǒng)的HTML有啥區(qū)別掠廓?
? ? 它使用了Django模板語言(Django Template language,DTL)
? ? ?可以使用第三方模板(需要修改配置亏狰,在settings.py 中的TEMPLATES中的第一項(xiàng):BACKEND就行)例如:jinja2
開發(fā)第一個(gè)templates
步驟:
? ? ? ?在APP的根目錄下創(chuàng)建名為templates的目錄(必須叫這個(gè)名字,打錯(cuò)Django就找不到里面的靜態(tài)文件)
? ? ? ?在該目錄下創(chuàng)建HTML文件
? ? ? ?在views.py中返回render()
views.py的代碼:
def indexhtml(request):
? ? return render(request,'index.html')
然后配置url? ?
?url(r'^indexhtml/$',views.indexhtml),
可以運(yùn)行了
上面的例子是最簡單的每瞒,但通常render函數(shù)有三個(gè)參數(shù)
DTL初步使用:
? ? ? render()函數(shù)中支持一個(gè)dict類型參數(shù)
? ? ?該字典是后臺傳遞到模板的參數(shù)金闽,鍵為參數(shù)名
? ? ? 在模板證使用{{參數(shù)名}}來直接使用
render()函數(shù)有三個(gè)參數(shù):
? ? ? ? ?render(request,"要渲染的HTML文件",“傳回前臺模板的后臺參數(shù)”)
eg:
在views.py文件中:
def indexhtml(request):
? ? return render(request,'index.html',{'hello':'hello,blog!'})
在HTML中使用
<h1>{{hello}}</h1>
Templates使用有一個(gè)很大的問題剿骨!
? ? ?再建一個(gè)APP 名為blog2,將blog中的templates完全復(fù)制到blog2下面代芜,url地址配好,這是我們運(yùn)行blog2就會發(fā)現(xiàn)一個(gè)問題浓利,怎么運(yùn)行顯示的都是blog的內(nèi)容挤庇,為什么會是這樣啊贷掖?
Django查找Template
? ? ? Django按照INSTALLED_APPS中添加順序查找Templates
? ? ? 不同APP下的Templates目錄中的同名.html文件會造成沖突
解決Templates沖突的方案
? ? ? ?在APP 的templates目錄下創(chuàng)建以APP名為名稱的目錄
? ? ? ?將HTML文件放在創(chuàng)建的項(xiàng)目下
然后將views.py文件改為:
def indexhtml(request):
? ? ? ? ?return render(request,'blog/index.html')
這樣兩個(gè)不同APP下相同的HTML名字也不會有沖突了嫡秕。