国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Python Django 模版全解與實(shí)戰(zhàn)

這篇具有很好參考價(jià)值的文章主要介紹了Python Django 模版全解與實(shí)戰(zhàn)。希望對大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問。

本文首先介紹了Django模板系統(tǒng)的基礎(chǔ)知識,接著探討了如何安裝和配置Django模板系統(tǒng),然后深入解析了Django模板的基本結(jié)構(gòu)、標(biāo)簽和過濾器的用法,闡述了如何在模板中展示模型數(shù)據(jù),最后使用一個(gè)實(shí)際項(xiàng)目的例子來演示如何在實(shí)際開發(fā)中使用Django模板系統(tǒng)。

Django模板系統(tǒng)的簡介

Django模板系統(tǒng)是一個(gè)強(qiáng)大的組件,它允許我們根據(jù)所提供的數(shù)據(jù)動態(tài)生成HTML、XML等結(jié)構(gòu)化文本。模板系統(tǒng)不僅易于使用,且功能豐富。它包括一個(gè)內(nèi)置的語言:Django模板語言 (DTL),這是一種簡單、非侵入式的語言,用于定義模板的結(jié)構(gòu)和邏輯。

例如,在一個(gè)Django模板中,我們可以使用變量和標(biāo)簽來動態(tài)地生成內(nèi)容:

# Django模板示例
{{ book.title }} <!-- 輸出: Python編程基礎(chǔ) -->
{% if user.is_authenticated %} <!-- 如果用戶已登錄 -->
  Hello, {{ user.username }}! <!-- 輸出: Hello, John! -->
{% endif %}

以上代碼中,花括號{{ }}用于輸出變量的值,標(biāo)簽{% %}用于執(zhí)行邏輯操作。


模板的基本結(jié)構(gòu)

Django模板是由一系列特殊的語法構(gòu)成的文本文件,用于動態(tài)生成HTML、XML或其他標(biāo)記語言。下面我們來詳細(xì)了解一下Django模板的基本結(jié)構(gòu)。

模板語法

Django模板主要使用兩種語法:

  • 變量:用雙大括號({{ }})包裹。比如{{ variable }},Django將會將其替換為變量的值。
  • 標(biāo)簽:用大括號和百分號({% %})包裹。標(biāo)簽提供了模板的控制結(jié)構(gòu),比如循環(huán)、條件語句等。比如{% for item in list %}...{% endfor %}。

模板繼承

Django模板系統(tǒng)支持模板繼承。這是一種DRY(Don't Repeat Yourself)的設(shè)計(jì)原則。你可以定義一個(gè)基礎(chǔ)模板(base template),然后讓其他模板繼承這個(gè)基礎(chǔ)模板并覆蓋其中的某些部分。

例如,定義一個(gè)基礎(chǔ)模板base.html

<!-- base.html -->
<html>
<body>
{% block content %}{% endblock %}
</body>
</html>

然后,定義一個(gè)子模板child.html,繼承base.html并覆蓋content塊:

<!-- child.html -->
{% extends "base.html" %}

{% block content %}
<p>Hello, Django!</p>
{% endblock %}

其他模板

除了繼承,Django模板還支持包含(include)其他模板,這可以幫助你將模板分解為小的、可重用的部分。

例如,定義一個(gè)模板header.html

<!-- header.html -->
<header>
  <h1>Welcome to My Website</h1>
</header>

然后,在另一個(gè)模板中包含這個(gè)模板:

{% include "header.html" %}

<p>This is the main content...</p>

配置Django模板

配置Django模板系統(tǒng)

Django模板系統(tǒng)默認(rèn)已經(jīng)被包含在Django項(xiàng)目中。你可以在項(xiàng)目的settings.py文件中找到模板的配置信息:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': [BASE_DIR / 'templates'],
        ...
    },
]

你可以在'DIRS'配置項(xiàng)中添加模板的路徑。默認(rèn)情況下,Django會在每個(gè)應(yīng)用的templates目錄下查找模板文件。

配置模板加載方式

Django模板系統(tǒng)可以從多個(gè)位置加載模板。默認(rèn)情況下,Django會在每個(gè)應(yīng)用的templates目錄下查找模板文件。你可以通過修改TEMPLATES配置中的'DIRS'選項(xiàng)來添加其他模板目錄。例如,你可以添加一個(gè)全局的模板目錄:

# settings.py

import os
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))

TEMPLATES = [
    {
        ...
        'DIRS': [os.path.join(BASE_DIR, 'templates')],
        ...
    },
]

在此配置中,所有的模板文件都會在項(xiàng)目根目錄下的templates文件夾中查找。

配置模板引擎

TEMPLATES配置中,'BACKEND'選項(xiàng)用于指定使用哪個(gè)模板引擎。Django默認(rèn)使用的是自帶的模板引擎,即django.template.backends.django.DjangoTemplates。你也可以切換到其他模板引擎,例如Jinja2:

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.jinja2.Jinja2',
        ...
    },
]

注意,不同的模板引擎可能需要不同的配置,并且提供的模板語言也可能不同。

配置自定義模板標(biāo)簽和過濾器

如果你有自定義的模板標(biāo)簽和過濾器,你需要把它們放在某個(gè)應(yīng)用下的templatetags目錄中。然后在INSTALLED_APPS配置中添加該應(yīng)用,Django就會自動加載你的自定義模板標(biāo)簽和過濾器:

# settings.py

INSTALLED_APPS = [
    ...
    'myapp',
    ...
]

模板標(biāo)簽詳解

Django模板系統(tǒng)中的標(biāo)簽(Tags)提供了各種控制結(jié)構(gòu),包括循環(huán)、條件語句、模板繼承等。接下來我們詳細(xì)介紹一些常用的標(biāo)簽。

for標(biāo)簽

for標(biāo)簽用于在模板中循環(huán)遍歷序列:

{% for item in item_list %}
    <p>{{ item.name }}</p> <!-- 輸出每個(gè)項(xiàng)目的名稱 -->
{% endfor %}

if標(biāo)簽

if標(biāo)簽用于條件判斷。你可以使用elifelse進(jìn)行多分支判斷:

{% if user.is_authenticated %}
    <p>Welcome back, {{ user.username }}.</p> <!-- 如果用戶已經(jīng)認(rèn)證,打印歡迎信息 -->
{% else %}
    <p>Please log in.</p> <!-- 如果用戶未認(rèn)證,提示用戶登錄 -->
{% endif %}

extends標(biāo)簽和block標(biāo)簽

extends標(biāo)簽用于模板繼承,block標(biāo)簽用于定義可被子模板覆蓋的區(qū)塊:

<!-- base.html -->
<html>
<body>
{% block content %}{% endblock %}
</body>
</html>

<!-- child.html -->
{% extends "base.html" %}

{% block content %}
<p>Hello, Django!</p>
{% endblock %}

include標(biāo)簽

include標(biāo)簽用于包含其他模板,使得模板可重用:

{% include "header.html" %}

url標(biāo)簽

url標(biāo)簽用于生成URL。它接受一個(gè)視圖函數(shù)的名稱或URL模式的名稱,以及可選的參數(shù),然后返回對應(yīng)的URL:

<a href="{% url 'home' %}">Home</a> <!-- 生成首頁的URL -->

csrf_token標(biāo)簽

在使用POST表單時(shí),csrf_token標(biāo)簽用于生成CSRF令牌,以防止跨站請求偽造攻擊:

<form method="post">
{% csrf_token %}
<!-- 表單內(nèi)容 -->
</form>

模板過濾器

在Django模板中,過濾器可以在變量被顯示之前對其進(jìn)行修改。過濾器的語法是在變量名后面添加一個(gè)豎線(|)和過濾器的名稱。如果過濾器需要參數(shù),可以使用冒號(:)添加。讓我們詳細(xì)了解一下。

基本使用

比如,我們可以使用date過濾器來格式化日期:

{{ date_var|date:"F j, Y" }} <!-- 輸出: July 8, 2023 -->

使用lower過濾器將文本轉(zhuǎn)換為小寫:

{{ "Hello World"|lower }} <!-- 輸出: hello world -->

鏈接過濾器

你還可以鏈接多個(gè)過濾器,他們會按照從左到右的順序執(zhí)行:

{{ "Hello World"|lower|capfirst }} <!-- 輸出: Hello world -->

自定義過濾器

除了使用Django內(nèi)置的過濾器,你還可以創(chuàng)建自己的過濾器。為此,你需要在某個(gè)應(yīng)用下的templatetags目錄中創(chuàng)建一個(gè)Python文件,然后在其中定義你的過濾器函數(shù),并使用register.filter裝飾器注冊它:

from django import template

register = template.Library()

@register.filter
def my_filter(value):
    # 這是一個(gè)簡單的過濾器,它返回值的第一個(gè)字符
    return value[0]

然后你就可以在模板中使用這個(gè)過濾器了:

{{ "Hello World"|my_filter }} <!-- 輸出: H -->

Django模板中展示模型數(shù)據(jù)

Django框架將模型數(shù)據(jù)和模板視圖分離,這讓我們在模板中方便地展示模型數(shù)據(jù)。在視圖函數(shù)中,我們可以查詢模型數(shù)據(jù),然后將它傳遞給模板。在模板中,我們使用特殊的語法來訪問和展示這些數(shù)據(jù)。

在視圖中準(zhǔn)備數(shù)據(jù)

假設(shè)我們有一個(gè)Blog模型,它有一個(gè)title字段和一個(gè)content字段。在我們的視圖函數(shù)中,我們可以查詢所有的博客:

from django.shortcuts import render
from .models import Blog

def blog_list(request):
    blogs = Blog.objects.all()  # 查詢所有的博客
    return render(request, 'blog_list.html', {'blogs': blogs})

在模板中展示數(shù)據(jù)

然后,在我們的blog_list.html模板中,我們可以使用for標(biāo)簽來遍歷所有的博客,并使用變量語法來展示每個(gè)博客的標(biāo)題和內(nèi)容:

{% for blog in blogs %}
<h2>{{ blog.title }}</h2>  <!-- 展示博客標(biāo)題 -->
<p>{{ blog.content }}</p>  <!-- 展示博客內(nèi)容 -->
{% endfor %}

使用過濾器格式化數(shù)據(jù)

在模板中,我們還可以使用過濾器來對模型數(shù)據(jù)進(jìn)行格式化。例如,我們可以使用date過濾器來格式化日期,或者使用truncatechars過濾器來限制文本的長度:

{% for blog in blogs %}
<h2>{{ blog.title }}</h2>
<p>{{ blog.publish_date|date:"F j, Y" }}</p>  <!-- 使用date過濾器格式化發(fā)布日期 -->
<p>{{ blog.content|truncatechars:100 }}</p>  <!-- 使用truncatechars過濾器限制內(nèi)容長度 -->
{% endfor %}

在實(shí)際的項(xiàng)目中使用Django模板

Django模板系統(tǒng)在實(shí)際的項(xiàng)目開發(fā)中扮演著重要的角色。下面我們就以一個(gè)簡單的博客系統(tǒng)作為例子,演示如何在實(shí)際項(xiàng)目中使用Django模板。

第一步:定義你的模型

首先,我們需要在我們的應(yīng)用中定義一個(gè)模型。在這個(gè)例子中,我們定義一個(gè)Post模型來表示博客文章:

from django.db import models

class Post(models.Model):
    title = models.CharField(max_length=200)  # 文章標(biāo)題
    content = models.TextField()  # 文章內(nèi)容
    pub_date = models.DateTimeField(auto_now_add=True)  # 發(fā)布日期

第二步:創(chuàng)建視圖

接著,我們需要?jiǎng)?chuàng)建一個(gè)視圖來處理用戶的請求。在這個(gè)視圖中,我們可以獲取所有的博客文章,并將它們傳遞給模板:

from django.shortcuts import render
from .models import Post

def post_list(request):
    posts = Post.objects.all()  # 獲取所有的博客文章
    return render(request, 'blog/post_list.html', {'posts': posts})  # 將文章傳遞給模板

第三步:編寫模板

然后,我們可以創(chuàng)建一個(gè)模板來展示博客文章。在這個(gè)模板中,我們使用for標(biāo)簽來遍歷所有的文章,并使用變量來展示文章的標(biāo)題和內(nèi)容:

{% for post in posts %}
<h2>{{ post.title }}</h2>
<p>{{ post.content }}</p>
<p>Published on {{ post.pub_date|date:"F j, Y" }}</p>
{% endfor %}

第四步:配置URLs

最后,我們需要在urls.py文件中配置URL,使得用戶可以訪問我們的視圖:

from django.urls import path
from . import views

urlpatterns = [
    path('posts/', views.post_list, name='post_list'),  # 當(dāng)用戶訪問/posts/時(shí),顯示博客文章列表
]

以上就是在實(shí)際項(xiàng)目中使用Django模板的基本步驟。通過這個(gè)例子,我們可以看到Django模板系統(tǒng)的強(qiáng)大和靈活性,它可以幫助我們快速地創(chuàng)建動態(tài)的網(wǎng)頁。


如有幫助,請多關(guān)注
個(gè)人微信公眾號:【Python全視角】
TeahLead_KrisChang,10+年的互聯(lián)網(wǎng)和人工智能從業(yè)經(jīng)驗(yàn),10年+技術(shù)和業(yè)務(wù)團(tuán)隊(duì)管理經(jīng)驗(yàn),同濟(jì)軟件工程本科,復(fù)旦工程管理碩士,阿里云認(rèn)證云服務(wù)資深架構(gòu)師,上億營收AI產(chǎn)品業(yè)務(wù)負(fù)責(zé)人。文章來源地址http://www.zghlxwxcb.cn/news/detail-533743.html

到了這里,關(guān)于Python Django 模版全解與實(shí)戰(zhàn)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

  • 人工智能 - 圖像分類:發(fā)展歷史、技術(shù)全解與實(shí)戰(zhàn)

    人工智能 - 圖像分類:發(fā)展歷史、技術(shù)全解與實(shí)戰(zhàn)

    在本文中,我們深入探討了圖像分類技術(shù)的發(fā)展歷程、核心技術(shù)、實(shí)際代碼實(shí)現(xiàn)以及通過MNIST和CIFAR-10數(shù)據(jù)集的案例實(shí)戰(zhàn)。文章不僅提供了技術(shù)細(xì)節(jié)和實(shí)際操作的指南,還展望了圖像分類技術(shù)未來的發(fā)展趨勢和挑戰(zhàn)。 關(guān)注TechLead,分享AI全維度知識。作者擁有10+年互聯(lián)網(wǎng)服務(wù)架

    2024年02月05日
    瀏覽(29)
  • 人工智能 - 目標(biāo)檢測:發(fā)展歷史、技術(shù)全解與實(shí)戰(zhàn)

    人工智能 - 目標(biāo)檢測:發(fā)展歷史、技術(shù)全解與實(shí)戰(zhàn)

    本文全面回顧了目標(biāo)檢測技術(shù)的演進(jìn)歷程,從早期的滑動窗口和特征提取方法到深度學(xué)習(xí)的興起,再到Y(jié)OLO系列和Transformer的創(chuàng)新應(yīng)用。通過對各階段技術(shù)的深入分析,展現(xiàn)了計(jì)算機(jī)視覺領(lǐng)域的發(fā)展趨勢和未來潛力。 關(guān)注TechLead,分享AI全維度知識。作者擁有10+年互聯(lián)網(wǎng)服務(wù)架

    2024年02月05日
    瀏覽(19)
  • Go運(yùn)算操作符全解與實(shí)戰(zhàn):編寫更高效的代碼!

    Go運(yùn)算操作符全解與實(shí)戰(zhàn):編寫更高效的代碼!

    本文全面探討了Go語言中的各類運(yùn)算操作符,從基礎(chǔ)的數(shù)學(xué)和位運(yùn)算到邏輯和特殊運(yùn)算符。文章旨在深入解析每一種運(yùn)算操作符的工作原理、應(yīng)用場景和注意事項(xiàng),以幫助開發(fā)者編寫更高效、健壯和可讀的Go代碼。 Go語言,作為一種現(xiàn)代的編程語言,不僅因?yàn)槠浜唵我鬃x的語法

    2024年02月09日
    瀏覽(20)
  • 大數(shù)據(jù)機(jī)器學(xué)習(xí)深度解讀決策樹算法:技術(shù)全解與案例實(shí)戰(zhàn)

    大數(shù)據(jù)機(jī)器學(xué)習(xí)深度解讀決策樹算法:技術(shù)全解與案例實(shí)戰(zhàn)

    本文深入探討了機(jī)器學(xué)習(xí)中的決策樹算法,從基礎(chǔ)概念到高級研究進(jìn)展,再到實(shí)戰(zhàn)案例應(yīng)用,全面解析了決策樹的理論及其在現(xiàn)實(shí)世界問題中的實(shí)際效能。通過技術(shù)細(xì)節(jié)和案例實(shí)踐,揭示了決策樹在提供可解釋預(yù)測中的獨(dú)特價(jià)值。 決策樹算法是機(jī)器學(xué)習(xí)領(lǐng)域的基石之一,其強(qiáng)

    2024年02月04日
    瀏覽(25)
  • 云計(jì)算 - 彈性計(jì)算技術(shù)全解與實(shí)踐

    云計(jì)算 - 彈性計(jì)算技術(shù)全解與實(shí)踐

    本文全面介紹了云計(jì)算中的彈性計(jì)算服務(wù)(ECS),從基礎(chǔ)概念、核心組件到選型考慮、實(shí)踐案例和高級優(yōu)化實(shí)踐。文章不僅提供了豐富的技術(shù)細(xì)節(jié)和實(shí)際例證,還提出了獨(dú)特的洞見,如數(shù)據(jù)作為核心、自動化的重要性、多維度的性能優(yōu)化,以及高可用與災(zāi)備的不可或缺性。

    2024年02月19日
    瀏覽(24)
  • 大數(shù)據(jù)云計(jì)算 - 彈性計(jì)算技術(shù)全解與實(shí)踐

    大數(shù)據(jù)云計(jì)算 - 彈性計(jì)算技術(shù)全解與實(shí)踐

    本文全面介紹了云計(jì)算中的彈性計(jì)算服務(wù)(ECS),從基礎(chǔ)概念、核心組件到選型考慮、實(shí)踐案例和高級優(yōu)化實(shí)踐。文章不僅提供了豐富的技術(shù)細(xì)節(jié)和實(shí)際例證,還提出了獨(dú)特的洞見,如數(shù)據(jù)作為核心、自動化的重要性、多維度的性能優(yōu)化,以及高可用與災(zāi)備的不可或缺性。

    2024年02月22日
    瀏覽(18)
  • 深入解析Go非類型安全指針:技術(shù)全解與最佳實(shí)踐

    深入解析Go非類型安全指針:技術(shù)全解與最佳實(shí)踐

    本文全面深入地探討了Go非類型安全指針,特別是在Go語言環(huán)境下的應(yīng)用。從基本概念、使用場景,到潛在風(fēng)險(xiǎn)和挑戰(zhàn),文章提供了一系列具體的代碼示例和最佳實(shí)踐。目的是幫助讀者在保證代碼安全和效率的同時(shí),更加精通非類型安全指針的使用。 關(guān)注【TechLeadCloud】,分享

    2024年02月08日
    瀏覽(22)
  • Python框架【模板繼承、繼承模板實(shí)戰(zhàn)、裝飾器、藍(lán)圖(介紹、單文件、目錄結(jié)構(gòu)、模版文件、靜態(tài)文件 url_for函數(shù)子域名實(shí)現(xiàn))】(五)

    Python框架【模板繼承、繼承模板實(shí)戰(zhàn)、裝飾器、藍(lán)圖(介紹、單文件、目錄結(jié)構(gòu)、模版文件、靜態(tài)文件 url_for函數(shù)子域名實(shí)現(xiàn))】(五)

    ??作者簡介:大家好,我是愛敲代碼的小王,CSDN博客博主,Python小白 ??系列專欄:python入門到實(shí)戰(zhàn)、Python爬蟲開發(fā)、Python辦公自動化、Python數(shù)據(jù)分析、Python前后端開發(fā) ??如果文章知識點(diǎn)有錯(cuò)誤的地方,請指正!和大家一起學(xué)習(xí),一起進(jìn)步?? ??如果感覺博主的文章還不錯(cuò)的

    2024年02月10日
    瀏覽(30)
  • 板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】

    板塊一 Servlet編程:第四節(jié) HttpServletResponse對象全解與重定向 來自【湯米尼克的JAVAEE全套教程專欄】

    在上一節(jié)中,我們系統(tǒng)的學(xué)習(xí)了請求響應(yīng)在Servlet中 service() 方法的第一個(gè)形參HttpServletRequest(請求)對象,這一節(jié)中我們將學(xué)習(xí)它的兄弟, service() 方法的第二個(gè)形參HttpServletResponse(響應(yīng))對象 在我們已然熟悉的瀏覽器訪問Servlet的過程中。Request和Response 對象分別代表請求和

    2024年02月21日
    瀏覽(24)
  • 詞!自然語言處理之詞全解和Python實(shí)戰(zhàn)!

    詞!自然語言處理之詞全解和Python實(shí)戰(zhàn)!

    本文全面探討了詞在自然語言處理(NLP)中的多維角色。從詞的基礎(chǔ)概念、形態(tài)和詞性,到詞語處理技術(shù)如規(guī)范化、切分和詞性還原,文章深入解析了每一個(gè)環(huán)節(jié)的技術(shù)細(xì)節(jié)和應(yīng)用背景。特別關(guān)注了詞在多語言環(huán)境和具體NLP任務(wù),如文本分類和機(jī)器翻譯中的應(yīng)用。文章通過

    2024年02月05日
    瀏覽(89)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包