天天看點

Django 搭建部落格項目(二)——模闆

如果用react 實作前端頁面,Django就沒必要使用模闆,Django是個背景服務程式,接受請求,響應資料,接口設計就可以是純粹的Reatful風格。

Python的模闆引擎預設使用Django template language (DTL)建構

現在setting.py 裡設定模闆項目的路徑,在TEMPLATES 裡設定DIR:[os.path.join(BASE_DIR, templates] ,這個是以後預設找templates的路徑。然後在項目根目錄下自己建立一個檔案夾改名templates

APP_DIRS表示是否在每個已經安裝的應用中查找模闆。應用(比如第一篇中的user目錄)的目錄下設定templates目錄,存放templates。如果應用需要可分離、可重用,建議模闆放在應用目錄下。

在urls.py 裡

from django.template import loader

就可以使用模闆了。

如上篇文章的index函數:

def index(request):
		template = loader.get_template('index.html')
		context = {'name': 'shenkuo'}#可以把想要填入的東西組成這樣的字典傳入,html檔案裡要這樣寫:{{name}} 
		html = template.render(context) #這裡的渲染僅僅是把html檔案給拼接出來變成str,真正的渲染發生在前端浏覽器。
		return HttpResponse(html.encode())
           

以上代碼可以改寫成更加簡潔的形式

def index(request):
	context = {'name':'shenkuo'}
	return render(request,'index.html',context, status = 201)
           

使用render要導入,

from django.shotcuts import render

在使用這種模闆技術時候,不能用别的方式取用屬性,隻能用.的方式。比如有個字典,{{dict[‘a’]}} 這種是錯誤的,本質上Django是用正規表達式來比對要替換的内容,是以隻能用這種: {{dict.a}} ,包括list的索引 也要用這種 :list.1 , list.2

點号使用時候,按以下順序查找:

1、字典 : foo[’‘bar’’] 2、屬性、方法: foo.bar 3、 數字索引查找 foo[bar]

由于他自動會判斷是否是屬性或者方法,是以在調用時候不要加() ,而是直接用點的形式:

dict.getitem() # 錯誤

dict.getitem #正确

總之三種括号都不能用,用點就是了。

{%if condition1%}
	...display1
{%elif condition2%}
	...display2
{%endif%}

           
{%for x in list%}
	<li>{{x.name}}</li>
{%empty%}
	<p>如果疊代清單是空的或不存在執行這條</p>
{%endfor%}
           
{% ifequal a b%}
	<h1>welcome</h1>
{%endifequal%}
           

過濾器文法:{{變量 | 過濾器:’‘參數’’}}

{{name| first | join:’’.’’}}

Django 搭建部落格項目(二)——模闆

也可以自定義filter

在一個應用下 ,比如user, 建構templatetags包,一定要有__init__.py 檔案。

from django.template import Library
register = Library()
@register.filter('filter名字')
def multiply(a,b):#隻能1到2個參數
	return a*b
           

在模闆中使用的時候要先{%load 包名%}

繼續閱讀