django template 模板渲染的實(shí)現(xiàn)
前言
Django 的模板系統(tǒng)是一個(gè)強(qiáng)大的工具,它將視圖邏輯與頁(yè)面設(shè)計(jì)分開(kāi),使得前后端開(kāi)發(fā)人員可以在同一項(xiàng)目中高效協(xié)作。以下是對(duì) Django 模板渲染功能的詳細(xì)解析。
Django 模板系統(tǒng)概述
Django 的模板系統(tǒng)旨在使設(shè)計(jì)人員能夠編寫 HTML,同時(shí)以一種安全和靈活的方式動(dòng)態(tài)顯示數(shù)據(jù)。這種分離關(guān)注點(diǎn)的設(shè)計(jì)允許后端開(kāi)發(fā)人員處理業(yè)務(wù)邏輯,而模板專注于數(shù)據(jù)的展示。
模板文件
位置: 通常,模板文件(.html)存放在名為
templates
的目錄下。該目錄可以在應(yīng)用的目錄結(jié)構(gòu)中,也可以是全局項(xiàng)目中指定的模板目錄。配置: 在
settings.py
文件中設(shè)置TEMPLATES
,Django 查找模板文件的位置。
TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [os.path.join(BASE_DIR, 'templates')], 'APP_DIRS': True, 'OPTIONS': { 'context_processors': [ 'django.template.context_processors.debug', 'django.template.context_processors.request', 'django.contrib.auth.context_processors.auth', 'django.contrib.messages.context_processors.messages', ], }, }, ]
模板語(yǔ)法
變量: 使用雙大括號(hào) {{ }}
包裹變量名以顯示變量的值。
<p>Hello, {{ user.username }}!</p>
過(guò)濾器: 用管道符 |
結(jié)合過(guò)濾器對(duì)變量進(jìn)行格式化或修改。
<p>Current time: {{ current_time|date:"F j, Y, P" }}</p>
Django 自帶許多內(nèi)置過(guò)濾器,如 date
, upper
, length
等。
標(biāo)簽: 使用 {% %}
包圍的標(biāo)簽來(lái)實(shí)現(xiàn)邏輯操作,控制流或加載模板庫(kù)。
{% if user.is_authenticated %} <p>Welcome back, {{ user.username }}!</p> {% else %} <p>Please log in.</p> {% endif %} {% for item in item_list %} <li>{{ item.name }}</li> {% endfor %}
注釋: 模板注釋不會(huì)輸出到生成的 HTML,使用 {# #}
注釋文本。
{# This is a comment #}
模板繼承
Django 支持模板繼承,使得代碼更易維護(hù)和復(fù)用。
父模板: 通常定義一個(gè)基本布局,使用 {% block %}
標(biāo)簽定義可重寫的區(qū)域。
<!-- base.html --> <html> <head> <title>{% block title %}Default Title{% endblock %}</title> </head> <body> <header>{% block header %}{% endblock %}</header> <main>{% block content %}{% endblock %}</main> <footer>{% block footer %}Default Footer{% endblock %}</footer> </body> </html>
子模板: 繼承基礎(chǔ)模板,并重寫定義的塊。
{% extends "base.html" %} {% block title %}Page Title{% endblock %} {% block content %} <p>This is the page-specific content.</p> {% endblock %}
包含模板
使用 {% include %}
標(biāo)簽將一個(gè)模板文件包含在另一個(gè)模板中,適用于重復(fù)出現(xiàn)的頁(yè)面片段。
<div class="sidebar"> {% include 'sidebar.html' %} </div>
上下文處理器
上下文處理器是一個(gè)可選的鉤子,用于將特定變量自動(dòng)添加到每個(gè)模板的上下文中。通過(guò)修改
TEMPLATES
的OPTIONS
來(lái)注冊(cè)。常用的上下文處理器包括
request
、static
和auth
等,這些處理器可以使得模板中訪問(wèn)全局變量變得更簡(jiǎn)便。
安全性
Django 模板系統(tǒng)默認(rèn)防止跨站腳本攻擊(XSS),對(duì)輸出的文本會(huì)進(jìn)行自動(dòng)轉(zhuǎn)義。
可以使用
safe
過(guò)濾器對(duì)已知安全的字符串進(jìn)行手動(dòng) unescape。
<p>{{ user_input|safe }}</p>
渲染過(guò)程
視圖加載模板: 在視圖函數(shù)或類視圖中,使用 render
方法加載和渲染模板。
from django.shortcuts import render def my_view(request): return render(request, 'my_template.html', {'key': 'value'})
返回 HttpResponse
: 渲染過(guò)程生成 HTML,并以 HttpResponse
形式返回給客戶端。
總結(jié)
Django 的模板系統(tǒng)通過(guò)直觀的語(yǔ)法和強(qiáng)大的功能分離了表現(xiàn)層和業(yè)務(wù)邏輯,使得開(kāi)發(fā)過(guò)程更簡(jiǎn)潔和易維護(hù)。無(wú)論是簡(jiǎn)單的靜態(tài)展示還是復(fù)雜的動(dòng)態(tài)頁(yè)面,Django 的模板都提供了足夠的靈活性和安全性來(lái)應(yīng)對(duì)各種需求。通過(guò)模板繼承、過(guò)濾器和標(biāo)簽,開(kāi)發(fā)者可以高效地構(gòu)建精美的用戶界面并確保代碼的可重用性。
到此這篇關(guān)于django template 模板渲染的實(shí)現(xiàn)的文章就介紹到這了,更多相關(guān)django template 模板渲染內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python內(nèi)置模塊logging用法實(shí)例分析
這篇文章主要介紹了Python內(nèi)置模塊logging用法,結(jié)合實(shí)例形式較為詳細(xì)的分析了Python基于logging模塊的日志配置、輸出等常用操作技巧,需要的朋友可以參考下2018-02-02Python基礎(chǔ)之標(biāo)準(zhǔn)庫(kù)和常用的第三方庫(kù)案例教程
這篇文章主要介紹了Python基礎(chǔ)之標(biāo)準(zhǔn)庫(kù)和常用的第三方庫(kù)案例教程,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07Django REST Framework 分頁(yè)(Pagination)詳解
這篇文章主要介紹了Django REST Framework 分頁(yè)(Pagination)詳解,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-11-11