Django 渲染模板、路徑配置、變量使用。
DTL與普通的HTML文件的區別:
DTL模板是一種帶有特殊語法的HTML文件,這個HTML文件可以被Django編譯,可以傳遞參數進
去,實現數據動態化。在編譯完成後,生成一個普通的HTML文件,然後發送給客戶端。
渲染模板
先在templates文件夾下創建html文件。
render_to_string:找到模板,然後將模板編譯後渲染成Python的字符串格式。最後在通過HttpResponse類包裝成一個HttpResponse對象返回回去。
在views.py文件中編寫 from django.template.loader import render_to_string from django.http import HttpResponse def index(request): html = render_to_string("detail.html") return HttpResponse(html) 最後在urls.py文件中,將路徑寫入即可
以上方式雖然已經很方便了。但是django還提供了一個更加簡便的方式,直接將模板渲染成字符串和包裝成 HttpResponse 對象一步到位完成。
在views.py文件中編寫 from django.shortcuts import render der index(request): return render(request,'detail.html')
模板查找路徑配置
模板查找路徑配置:在項目的 settings.py文件中。有一個TEMPLATES 配置,這個配置包含了模板引擎的配置,模板查找路徑的配置,模板上下文的配置等。模板路徑可以在這個地方配置。
DIRS:這是一個列表,在這個列表中可以存放所有的模板路徑,以後在視圖中使用 render或者render_ to _ string渲染模板的時候,會在這個列表的路徑中查找模板。
'DIRS':[os.path.join(BASE_DIR, 'templates')]
APP_DIRS:默認為True,這個設置為 True 後,會在"INSTALLED _ APPS"的安裝了的 APP下的 templates文件加中查找模板。
'APP_DIRS': True,
DIRS優先級高於APP_DIRS
模板變量的使用
模板中可以包含變量, Django在渲染模板的時候,可以傳遞變量對應的值過去進行替換。變量的命名規範和Python非常類似,只能是阿拉伯數字和英文字符以及下劃線的組合,不能出現標點符號等特殊字符。變量需要通過視圖函數渲染,視圖函數在使用render或者render_to_string的時候可以傳遞一個context 的參數,這個參數是一個字典類型。以後在模板中的變量就從這個字典中讀取值的。
views.py代碼示例
def profile(request): return render(request,'profile.html',context={'username':'張三 '})
profile.html模板代碼示例
<p>{{username}}</p>
模板中的變量同樣也支持 點(.)的形式。在出現了點的情況,比如 person.username,模板是按照以下方式進行解析的:
views.py示例
class Person(object): def__init__(self,username): self.username = username def profile(request): p = Person('jiajia') #創建一個對象 context = { 'person':p } return render(request,'profile.html,context=context)
html代碼示例
<html> ... <body> {{person.username}} #根據Key來獲取 </body> </html>
傳遞的一個參數是一個模型或者是一個類。獲取屬性的話。可以通過點的方式
如果person是一個字典呢?
views.py示例
class Person(object): def__init__(self,username): self.username = username def profile(request): context = { 'person':{ 'username':'jiajia' #person對應的是一個字典 } } return render(request,'profile.html,context=context)
html代碼示例
{{person.username}}
註意
如果views.py文件是這樣的。
context = {
'person':{
'username':'jiajia' #person對應的是一個字典
'keys':'abc'
}
}
html文件是這樣的呢?
{{person.keys}}
返回的是abc,即對應的值。這樣是會產生歧義的。為了避免產生歧義,應該避免在這個字典內寫他本身的一些屬性來作為這個鍵的值!
另外的形式
views.py示例
context = { 'person':[ 'a', #這裏是一個中括號 'b', 'c' ] }
如何獲取列表屬性的第一個值a呢?
html代碼示例
{{person.0}} #通過點(.)索引獲取
同理,元組也是這樣。
Django 渲染模板、路徑配置、變量使用。