天天看點

關于django的模闆

模闆

問題

如何向請求者傳回一個漂亮的頁面呢?

肯定需要用到html、css,如果想要更炫的效果還要加入js,問題來了,這麼一堆字段串全都寫到視圖中,作為HttpResponse()的參數嗎?這樣定義就太麻煩了吧,因為定義字元串是不會出任何效果和錯誤的,如果有一個專門定義前端頁面的地方就好了。

解決問題的技術來了:模闆。

在Django中,将前端的内容定義在模闆中,然後再把模闆交給視圖調用,各種漂亮、炫酷的效果就出現了。

建立模闆

為應用booktest下的視圖index建立模闆index.html,目錄結構如下圖:

關于django的模闆

設定查找模闆的路徑:打開test1/settings.py檔案,設定TEMPLATES的DIRS值

'DIRS': [os.path.join(BASE_DIR, 'templates')],      
關于django的模闆

定義模闆

打開templtes/booktest/index.html檔案,定義代碼如下:

<html>
<head>
    <title>圖書清單</title>
</head>
<body>
<h1>{{title}}</h1>
{%for i in list%}
{{i}}<br>
{%endfor%}
</body>
</html>      

在模闆中輸出變量文法如下,變量可能是從視圖中傳遞過來的,也可能是在模闆中定義的。

{{變量名}}      

在模闆中編寫代碼段文法如下:

{%代碼段%}      

視圖調用模闆

調用模闆分為三步驟:

  • 1.找到模闆
  • 2.定義上下文
  • 3.渲染模闆

打開booktst/views.py檔案,調用上面定義的模闆檔案

from django.http import HttpResponse
from django.template import loader,RequestContext

def index(request):
    # 1.擷取模闆
    template=loader.get_template('booktest/index.html')
    # 2.定義上下文
    context=RequestContext(request,{'title':'圖書清單','list':range(10)})
    # 3.渲染模闆
    return HttpResponse(template.render(context))      

打開浏覽器重新整理頁面,顯示效果如下圖:

關于django的模闆

視圖調用模闆簡寫

  • 第一個參數為request對象
  • 第二個參數為模闆檔案路徑
  • 第三個參數為字典,表示向模闆中傳遞的上下文資料
from django.shortcuts import render

def index(request):
    context={'title':'圖書清單','list':range(10)}
    return render(request,'booktest/index.html',context)