關(guān)鍵詞:
Python、web開發(fā)、Django、模板語言
?
概要
?文章來源地址http://www.zghlxwxcb.cn/news/detail-626662.html
作為 Python Web 開發(fā)的框架之一,Django 提供了一套完整的 MVC 模式,其中的模板語言為開發(fā)者提供了強大的渲染和控制前端的能力。本文介紹 Django 的模板語言。
?文章來源:http://www.zghlxwxcb.cn/news/detail-626662.html
1. Django 模板語言入門
Django 的模板語言是一種基于 HTML 的模板語言,它提供了豐富的標簽和過濾器來幫助開發(fā)者實現(xiàn)前端渲染和邏輯控制。在使用模板語言之前,我們需要先了解 Django 的模板文件結(jié)構(gòu)和渲染方式。
1.1 模板文件的結(jié)構(gòu)
在 Django 中,模板文件通常存放在應用的 templates 目錄下。一個模板文件通常由以下幾部分組成:
-
模板頭部:包含模板引用其他文件、定義模板塊等信息。
-
模板主體:包含實際的 HTML 代碼和模板標簽。
-
模板尾部:包含 JavaScript 代碼、CSS 樣式等信息。
通常情況下,我們只需要編寫模板主體部分,而頭部和尾部可以使用已有的模板文件或者框架提供的默認模板。
1.2 模板的渲染方式
在 Django 中,模板文件可以通過視圖函數(shù)中的 render 函數(shù)進行渲染,例如:
from?django.shortcuts?import?render
def?index(request):
????context?=?{'title':?'Hello?World!'}
????return?render(request,?'index.html',?context)
在 render 函數(shù)中,第一個參數(shù)是請求對象,第二個參數(shù)是模板文件名,第三個參數(shù)是傳遞給模板的上下文變量。在模板中,我們可以通過變量名來訪問上下文變量,例如:
<h1>{{?title?}}</h1>
在模板渲染時,Django 會將模板中的變量替換為上下文變量的值,并執(zhí)行模板標簽和過濾器。
?
2. Django 模板語言進階
除了簡單的變量渲染,Django 的模板語言還提供了豐富的標簽和過濾器來實現(xiàn)邏輯控制和數(shù)據(jù)處理。下面我們將介紹一些常用的模板標簽和過濾器。
2.1 模板標簽
Django 的模板標簽可以實現(xiàn)邏輯控制和數(shù)據(jù)處理,常用的標簽包括:
-
if 標簽:用于條件判斷。
-
for 標簽:用于循環(huán)迭代。
-
include 標簽:用于引入其他模板文件。
-
block 和 extends 標簽:用于模板繼承和重載。
-
url 標簽:用于生成 URL。
例如,我們可以使用 if 標簽來判斷一個變量是否為空:
{%?if?variable?%}
????<p>{{?variable?}}</p>
{%?else?%}
????<p>Variable?is?empty.</p>
{%?endif?%}
使用 for 標簽來循環(huán)迭代一個列表:
{%?for?item?in?list?%}
????<li>{{?item?}}</li>
{%?endfor?%}
使用 include 標簽引入其他模板文件:
{%?include?'header.html'?%}
當我們需要在多個頁面中使用相同的 HTML 結(jié)構(gòu)時,可以使用 Django 的模板繼承和重載功能,減少代碼重復和維護成本。
先創(chuàng)建一個基礎(chǔ)模板文件 base.html,定義共用的 HTML 結(jié)構(gòu)和 CSS 樣式:
<!DOCTYPE?html>
<html>
<head>
????<title>{%?block?title?%}{%?endblock?%}</title>
????<link?rel="stylesheet"?href="style.css">
</head>
<body>
????<div?id="header">
????????{%?block?header?%}{%?endblock?%}
????</div>
????<div?id="content">
????????{%?block?content?%}{%?endblock?%}
????</div>
????<div?id="footer">
????????{%?block?footer?%}{%?endblock?%}
????</div>
</body>
</html>
在這個模板中,使用了 block 標簽來定義可重載的區(qū)域。例如?{% block title %}{% endblock %}
?定義了一個名為 title 的區(qū)域,該區(qū)域可以在子模板中被重載。
接下來創(chuàng)建一個子模板文件 child.html,繼承 base.html 并重載其中的區(qū)域:
{%?extends?'base.html'?%}
{%?block?title?%}Child?Page{%?endblock?%}
{%?block?header?%}
????<h1>Child?Header</h1>
{%?endblock?%}
{%?block?content?%}
????<p>Child?Content</p>
{%?endblock?%}
在該模板中,我們使用 extends 標簽來繼承 base.html,并使用 block 標簽重載了 title、header 和 content 區(qū)域。在渲染該模板時,Django 會自動將子模板中重載的區(qū)域插入到父模板中對應的位置,最終生成完整的 HTML 頁面。
通過模板繼承和重載功能,我們可以更加方便地管理和維護大型 Web 應用程序中的 HTML 結(jié)構(gòu)和樣式。
2.2 模板過濾器
Django 的模板過濾器可以對變量進行處理和格式化,常用的過濾器包括:
-
date:用于格式化日期。
-
length:用于獲取列表長度。
-
upper 和 lower:用于將字符串轉(zhuǎn)換為大寫和小寫。
-
join:用于將列表轉(zhuǎn)換為字符串。
-
default:用于設置默認值。
例如,可以使用 date 過濾器來格式化日期:
<p>{{?date|date:"Y-m-d"?}}</p>
使用 length 過濾器獲取列表長度:
<p>{{?list|length?}}</p>
使用 upper 和 lower 過濾器將字符串轉(zhuǎn)換為大寫和小寫:
<p>{{?string|upper?}}</p>
<p>{{?string|lower?}}</p>
將日期格式化為指定的字符串。
??<p>{{?post.pub_date|date:"F?j,?Y"?}}</p>
截取列表的一部分元素。
??<ul>
??{%?for?item?in?items|slice:":3"?%}
??????<li>{{?item?}}</li>
??{%?endfor?%}
??</ul>
將文本中的URL自動轉(zhuǎn)化為鏈接。
??<p>{{?post.content|urlize?}}</p>
?
3. Django 模板語言實戰(zhàn)
在實際的 Web 開發(fā)中,我們經(jīng)常需要使用 Django 的模板語言來實現(xiàn)一些常用的功能。下面介紹幾個實用的實戰(zhàn)案例。
3.1 分頁功能
在列表頁面中,通常需要實現(xiàn)分頁功能。Django 提供了內(nèi)置的分頁模塊,可以幫助我們快速實現(xiàn)分頁功能。首先,需要在視圖函數(shù)中引入分頁模塊:
from?django.core.paginator?import?Paginator
def?list(request):
????items?=?Item.objects.all()
????paginator?=?Paginator(items,?10)
????page?=?request.GET.get('page')
????items?=?paginator.get_page(page)
????return?render(request,?'list.html',?{'items':?items})
在模板中,可以使用分頁模塊提供的標簽和過濾器來實現(xiàn)分頁功能:
{%?for?item?in?items?%}
????<p>{{?item.name?}}</p>
{%?endfor?%}
{%?if?items.has_previous?%}
????<a?href="?page={{?items.previous_page_number?}}">上一頁</a>
{%?endif?%}
{%?for?i?in?items.paginator.page_range?%}
????{%?if?items.number?==?i?%}
????????<strong>{{?i?}}</strong>
????{%?else?%}
????????<a?href="?page={{?i?}}">{{?i?}}</a>
????{%?endif?%}
{%?endfor?%}
{%?if?items.has_next?%}
????<a?href="?page={{?items.next_page_number?}}">下一頁</a>
{%?endif?%}
3.2 表單驗證功能
在表單頁面通常需要驗證用戶輸入的數(shù)據(jù)是否合法。Django 提供了內(nèi)置的表單驗證模塊,可以幫助我們快速實現(xiàn)表單驗證功能。首先需要定義一個表單類:
from?django?import?forms
class?ContactForm(forms.Form):
????name?=?forms.CharField(max_length=50)
????email?=?forms.EmailField()
????message?=?forms.CharField(widget=forms.Textarea)
這里定義了一個名為 ContactForm 的表單類,其中包含三個字段:name、email 和 message。name 字段使用了 CharField 類來驗證用戶輸入的姓名,限制最大長度為 50 個字符;email 字段使用了 EmailField 類來驗證用戶輸入的電子郵件地址,確保其符合電子郵件地址的格式;message 字段使用了 CharField 類,并使用了 Textarea 組件來允許用戶輸入多行文本信息。
在視圖函數(shù)中,我們可以使用表單驗證模塊來驗證用戶輸入的數(shù)據(jù):
from?django.shortcuts?import?render
from?.forms?import?ContactForm
def?contact(request):
????if?request.method?==?'POST':
????????form?=?ContactForm(request.POST)
????????if?form.is_valid():
????????????#?處理用戶輸入的數(shù)據(jù)
????????????return?HttpResponseRedirect('/thanks/')
????else:
????????form?=?ContactForm()
????return?render(request,?'contact.html',?{'form':?form})
在模板中,我們可以使用表單模塊提供的標簽和過濾器來快速渲染表單:
<form?method="post">
????{%?csrf_token?%}
????{{?form.as_p?}}
????<button?type="submit">提交</button>
</form>
?
技術(shù)總結(jié)
本文章介紹了 Django 的模板語言,包括模板文件的結(jié)構(gòu)、模板的渲染方式、常用的模板標簽和過濾器,以及實用的實戰(zhàn)案例。
?
如果文章對你有所幫助,歡迎點贊收藏轉(zhuǎn)發(fā),感謝??
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
?
到了這里,關(guān)于Python web實戰(zhàn)之 Django 的模板語言詳解的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!