Django框架模板用法詳解
在上一章節(jié)中我們使用 django.http.HttpResponse() 來(lái)輸出 "Hello World!"。該方式將數(shù)據(jù)與視圖混合在一起,不符合 Django 的 MVC 思想。
本章節(jié)我們將為大家詳細(xì)介紹 Django 模板的應(yīng)用,模板是一個(gè)文本,用于分離文檔的表現(xiàn)形式和內(nèi)容。
一、模板應(yīng)用實(shí)例
我們接著上一章節(jié)的項(xiàng)目將在 HelloWorld 目錄底下創(chuàng)建 templates 目錄并建立 runoob.html文件,整個(gè)目錄結(jié)構(gòu)如下:
HelloWorld/ |-- HelloWorld | |-- __init__.py | |-- __init__.pyc | |-- settings.py | |-- settings.pyc | |-- urls.py | |-- urls.pyc | |-- views.py | |-- views.pyc | |-- wsgi.py | `-- wsgi.pyc |-- manage.py `-- templates `-- runoob.html
runoob.html 文件代碼如下:
<h1>{{ hello }}</h1>
從模板中我們知道變量使用了雙括號(hào)。
接下來(lái)我們需要向Django說(shuō)明模板文件的路徑,修改HelloWorld/settings.py,修改 TEMPLATES 中的 DIRS 為 [BASE_DIR+"/templates",],如下所示:
...TEMPLATES = [ { 'BACKEND': 'django.template.backends.django.DjangoTemplates', 'DIRS': [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', ], }, }, ] ...
我們現(xiàn)在修改 views.py,增加一個(gè)新的對(duì)象,用于向模板提交數(shù)據(jù):
from django.shortcuts import render def runoob(request): context = {} context['hello'] = 'Hello World!' return render(request, 'runoob.html', context)
urls.py 文件代碼:
from django.urls import path from . import views urlpatterns = [ path('runoob/', views.runoob), ]
可以看到,我們這里使用 render 來(lái)替代之前使用的 HttpResponse。render 還使用了一個(gè)字典 context 作為參數(shù)。
context 字典中元素的鍵值 hello 對(duì)應(yīng)了模板中的變量 {{ hello }}。
再次訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
這樣我們就完成了使用模板來(lái)輸出數(shù)據(jù),從而實(shí)現(xiàn)數(shù)據(jù)與視圖分離。
接下來(lái)我們將具體介紹模板中常用的語(yǔ)法規(guī)則。
二、Django 模板標(biāo)簽
1、變量
模板語(yǔ)法:
view:{"HTML變量名" : "views變量名"} HTML:{{變量名}}
from django.shortcuts import render def runoob(request): views_name = "菜鳥(niǎo)教程" return render(request,"runoob.html", {"name":views_name})
templates 中的 runoob.html :
<p>{{ name }}</p>
再次訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
2、列表
templates 中的 runoob.html中,可以用 . 索引下標(biāo)取出對(duì)應(yīng)的元素。
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): views_list = ["菜鳥(niǎo)教程1","菜鳥(niǎo)教程2","菜鳥(niǎo)教程3"] return render(request, "runoob.html", {"views_list": views_list})
HelloWorld/templates/runoob.html 文件代碼:
<p>{{ views_list }}</p> # 取出整個(gè)列表 <p>{{ views_list.0 }}</p> # 取出列表的第一個(gè)元素
再次訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
3、字典
templates 中的 runoob.html中,可以用 .鍵 取出對(duì)應(yīng)的值。
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): views_dict = {"name":"菜鳥(niǎo)教程"} return render(request, "runoob.html", {"views_dict": views_dict})
HelloWorld/templates/runoob.html 文件代碼:
<p>{{ views_dict }}</p> <p>{{ views_dict.name }}</p>
再次訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
4、過(guò)濾器
模板語(yǔ)法:
{{ 變量名 | 過(guò)濾器:可選參數(shù) }}
模板過(guò)濾器可以在變量被顯示前修改它,過(guò)濾器使用管道字符,如下所示:
{{ name|lower }}
{{ name }} 變量被過(guò)濾器 lower 處理后,文檔大寫(xiě)轉(zhuǎn)換文本為小寫(xiě)。
過(guò)濾管道可以被* 套接* ,既是說(shuō),一個(gè)過(guò)濾器管道的輸出又可以作為下一個(gè)管道的輸入:
{{ my_list|first|upper }}
以上實(shí)例將第一個(gè)元素并將其轉(zhuǎn)化為大寫(xiě)。
有些過(guò)濾器有參數(shù)。 過(guò)濾器的參數(shù)跟隨冒號(hào)之后并且總是以雙引號(hào)包含。 例如:
{{ bio|truncatewords:"30" }}
這個(gè)將顯示變量 bio 的前30個(gè)詞。
其他過(guò)濾器:
- addslashes : 添加反斜杠到任何反斜杠、單引號(hào)或者雙引號(hào)前面。
- date : 按指定的格式字符串參數(shù)格式化 date 或者 datetime 對(duì)象,實(shí)例:
{{ pub_date|date:"F j, Y" }}
- length : 返回變量的長(zhǎng)度。
(1)default
default 為變量提供一個(gè)默認(rèn)值。
如果 views 傳的變量的布爾值是 false,則使用指定的默認(rèn)值。
以下值為 false:
0 0.0 False 0j "" [] () set() {} None
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): name =0 return render(request, "runoob.html", {"name": name})
HelloWorld/templates/runoob.html 文件代碼:
{{ name|default:"菜鳥(niǎo)教程666" }}
再次訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
(2)length
返回對(duì)象的長(zhǎng)度,適用于字符串和列表。
字典返回的是鍵值對(duì)的數(shù)量,集合返回的是去重后的長(zhǎng)度。
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): name ="菜鳥(niǎo)教程" return render(request, "runoob.html", {"name": name})
HelloWorld/templates/runoob.html 文件代碼:
{{ name|length}}
再次訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
(3)filesizeformat
以更易讀的方式顯示文件的大?。?#39;13 KB', '4.1 MB', '102 bytes'等)。
字典返回的是鍵值對(duì)的數(shù)量,集合返回的是去重后的長(zhǎng)度。
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): num=1024 return render(request, "runoob.html", {"num": num})
HelloWorld/templates/runoob.html 文件代碼:
{{ num|filesizeformat}}
再次訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
(4)date
根據(jù)給定格式對(duì)一個(gè)日期變量進(jìn)行格式化。
格式 Y-m-d H:i:s返回 年-月-日 小時(shí):分鐘:秒 的格式時(shí)間。
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): import datetime now =datetime.datetime.now() return render(request, "runoob.html", {"time": now})
HelloWorld/templates/runoob.html 文件代碼:
{{ time|date:"Y-m-d" }}
再次訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
(5)truncatechars
如果字符串包含的字符總個(gè)數(shù)多于指定的字符數(shù)量,那么會(huì)被截?cái)嗟艉竺娴牟糠帧?/p>
截?cái)嗟淖址畬⒁?... 結(jié)尾。
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): views_str = "菜鳥(niǎo)教程" return render(request, "runoob.html", {"views_str": views_str})
HelloWorld/templates/runoob.html 文件代碼:
{{ views_str|truncatechars:2}}
再訪問(wèn)訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
(6)safe
將字符串標(biāo)記為安全,不需要轉(zhuǎn)義。
要保證 views.py 傳過(guò)來(lái)的數(shù)據(jù)絕對(duì)安全,才能用 safe。
和后端 views.py 的 mark_safe 效果相同。
Django 會(huì)自動(dòng)對(duì) views.py 傳到HTML文件中的標(biāo)簽語(yǔ)法進(jìn)行轉(zhuǎn)義,令其語(yǔ)義失效。加 safe 過(guò)濾器是告訴 Django 該數(shù)據(jù)是安全的,不必對(duì)其進(jìn)行轉(zhuǎn)義,可以讓該數(shù)據(jù)語(yǔ)義生效。
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): views_str = "<a return render(request, "runoob.html", {"views_str": views_str})
HelloWorld/templates/runoob.html 文件代碼:
{{ views_str|safe }}
再訪問(wèn)訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
5、if/else 標(biāo)簽
基本語(yǔ)法格式如下:
{% if condition %} ... display {% endif %}
或者:
{% if condition1 %} ... display 1 {% elif condition2 %} ... display 2 {% else %} ... display 3 {% endif %}
根據(jù)條件判斷是否輸出。if/else 支持嵌套。
{% if %} 標(biāo)簽接受 and , or 或者 not 關(guān)鍵字來(lái)對(duì)多個(gè)變量做判斷 ,或者對(duì)變量取反( not ),例如:
{% if athlete_list and coach_list %} athletes 和 coaches 變量都是可用的。 {% endif %}
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): views_num = 88 return render(request, "runoob.html", {"num": views_num})
HelloWorld/templates/runoob.html 文件代碼:
{%if num > 90 and num <= 100 %} 優(yōu)秀 {% elif num > 60 and num <= 90 %} 合格 {% else %} 一邊玩去~ {% endif %}
再訪問(wèn)訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
6、for 標(biāo)簽
{% for %} 允許我們?cè)谝粋€(gè)序列上迭代。
與 Python 的 for 語(yǔ)句的情形類似,循環(huán)語(yǔ)法是 for X in Y ,Y 是要迭代的序列而 X 是在每一個(gè)特定的循環(huán)中使用的變量名稱。
每一次循環(huán)中,模板系統(tǒng)會(huì)渲染在 {% for %} 和 {% endfor %} 之間的所有內(nèi)容。
例如,給定一個(gè)運(yùn)動(dòng)員列表 athlete_list 變量,我們可以使用下面的代碼來(lái)顯示這個(gè)列表:
<ul> {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% endfor %} </ul>
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): views_list = ["菜鳥(niǎo)教程","菜鳥(niǎo)教程1","菜鳥(niǎo)教程2","菜鳥(niǎo)教程3",] return render(request, "runoob.html", {"views_list": views_list})
HelloWorld/templates/runoob.html 文件代碼:
{% for i in views_list %} {{ i }} {% endfor %}
再訪問(wèn)訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
給標(biāo)簽增加一個(gè) reversed 使得該列表被反向迭代:
{% for athlete in athlete_list reversed %} ... {% endfor %}
HelloWorld/templates/runoob.html 文件代碼:
{% for i in views_list reversed%} {{ i }} {% endfor %}
再訪問(wèn)訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
遍歷字典: 可以直接用字典 .items 方法,用變量的解包分別獲取鍵和值。
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): views_dict = {"name":"菜鳥(niǎo)教程","age":18} return render(request, "runoob.html", {"views_dict": views_dict})
HelloWorld/templates/runoob.html 文件代碼:
{% for i,j in views_dict.items %} {{ i }}---{{ j }} {% endfor %}
再訪問(wèn)訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
在 {% for %} 標(biāo)簽里可以通過(guò) {{forloop}} 變量獲取循環(huán)序號(hào)。
- forloop.counter: 順序獲取循環(huán)序號(hào),從 1 開(kāi)始計(jì)算
- forloop.counter0: 順序獲取循環(huán)序號(hào),從 0 開(kāi)始計(jì)算
- forloop.revcounter: 倒敘獲取循環(huán)序號(hào),結(jié)尾序號(hào)為 1
- forloop.revcounter0: 倒敘獲取循環(huán)序號(hào),結(jié)尾序號(hào)為 0
- forloop.first(一般配合if標(biāo)簽使用): 第一條數(shù)據(jù)返回 True,其他數(shù)據(jù)返回 False
- forloop.last(一般配合if標(biāo)簽使用): 最后一條數(shù)據(jù)返回 True,其他數(shù)據(jù)返回 False
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): views_list = ["a", "b", "c", "d", "e"] return render(request, "runoob.html", {"listvar": views_list})
HelloWorld/templates/runoob.html 文件代碼:
{% for i in listvar %} {{ forloop.counter }} {{ forloop.counter0 }} {{ forloop.revcounter }} {{ forloop.revcounter0 }} {{ forloop.first }} {{ forloop.last }} {% endfor %}
再訪問(wèn)訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
{% empty %}
可選的 {% empty %} 從句:在循環(huán)為空的時(shí)候執(zhí)行(即 in 后面的參數(shù)布爾值為 False )。
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): views_list = [] return render(request, "runoob.html", {"listvar": views_list})
HelloWorld/templates/runoob.html 文件代碼:
{% for i in listvar %} {{ forloop.counter0 }} {% empty %} 空空如也~ {% endfor %}
再訪問(wèn)訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
可以嵌套使用 {% for %} 標(biāo)簽:
{% for athlete in athlete_list %} <h1>{{ athlete.name }}</h1> <ul> {% for sport in athlete.sports_played %} <li>{{ sport }}</li> {% endfor %} </ul> {% endfor %}
7、ifequal/ifnotequal 標(biāo)簽
{% ifequal %} 標(biāo)簽比較兩個(gè)值,當(dāng)他們相等時(shí),顯示在 {% ifequal %} 和 {% endifequal %} 之中所有的值。
下面的例子比較兩個(gè)模板變量 user 和 currentuser :
{% ifequal user currentuser %} <h1>Welcome!</h1> {% endifequal %}
和 {% if %} 類似, {% ifequal %} 支持可選的 {% else%} 標(biāo)簽:8
{% ifequal section 'sitenews' %} <h1>Site News</h1> {% else %} <h1>No News Here</h1> {% endifequal %}
8、注釋標(biāo)簽
Django 注釋使用 {# #}。
{# 這是一個(gè)注釋 #}
9、include 標(biāo)簽
{% include %} 標(biāo)簽允許在模板中包含其它的模板的內(nèi)容。
下面這個(gè)例子都包含了 nav.html 模板:
{% include "nav.html" %}
三、csrf_token
csrf_token 用于form表單中,作用是跨站請(qǐng)求偽造保護(hù)。
如果不用{% csrf_token %}標(biāo)簽,在用 form 表單時(shí),要再次跳轉(zhuǎn)頁(yè)面會(huì)報(bào)403權(quán)限錯(cuò)誤。
用了{% csrf_token %}標(biāo)簽,在 form 表單提交數(shù)據(jù)時(shí),才會(huì)成功。
解析:
首先,向?yàn)g覽器發(fā)送請(qǐng)求,獲取登錄頁(yè)面,此時(shí)中間件 csrf 會(huì)自動(dòng)生成一個(gè)隱藏input標(biāo)簽,該標(biāo)簽里的 value 屬性的值是一個(gè)隨機(jī)的字符串,用戶獲取到登錄頁(yè)面的同時(shí)也獲取到了這個(gè)隱藏的input標(biāo)簽。
然后,等用戶需要用到form表單提交數(shù)據(jù)的時(shí)候,會(huì)攜帶這個(gè) input 標(biāo)簽一起提交給中間件 csrf,原因是 form 表單提交數(shù)據(jù)時(shí),會(huì)包括所有的 input 標(biāo)簽,中間件 csrf 接收到數(shù)據(jù)時(shí),會(huì)判斷,這個(gè)隨機(jī)字符串是不是第一次它發(fā)給用戶的那個(gè),如果是,則數(shù)據(jù)提交成功,如果不是,則返回403權(quán)限錯(cuò)誤。
四、自定義標(biāo)簽和過(guò)濾器
1、在 app 目錄下創(chuàng)建 templatetags 目錄(目錄名只能是 templatetags)。
2、在 templatetags 目錄下創(chuàng)建任意 py 文件,如:my_tags.py。
3、在該 py 文件下:
from django import template register = template.Library() #register的名字是固定的,不可改變
4、利用裝飾器 @register.filter 自定義過(guò)濾器。
注意:裝飾器的參數(shù)最多只能有 2 個(gè)。
@register.filter def my_filter(v1, v2): return v1 * v2
5、利用裝飾器 @register.simple_tag 自定義標(biāo)簽。
@register.simple_tag def my_tag1(v1, v2, v3): return v1 * v2 * v3
6、在使用自定義標(biāo)簽和過(guò)濾器前,要在 html 文件 body 的最上方中導(dǎo)入該 py 文件。
{% load my_tags %}
7、在 HTML 中使用自定義過(guò)濾器。
{{ 11|my_filter:22 }}
8、在 HTML 中使用自定義標(biāo)簽。
{% my_tag1 11 22 33 %}
9、語(yǔ)義化標(biāo)簽
在該 py 文件中導(dǎo)入 mark_safe。
from django.utils.safestring import mark_safe
定義標(biāo)簽時(shí),用上 mark_safe 方法,令標(biāo)簽語(yǔ)義化,相當(dāng)于 jQuery 中的 html() 方法。
和前端HTML文件中的過(guò)濾器 safe 效果一樣。
@register.simple_tag def my_html(v1, v2): temp_html = "<input type='text' id='%s' class='%s' />" %(v1, v2) return mark_safe(temp_html)
在HTML中使用該自定義標(biāo)簽,在頁(yè)面中動(dòng)態(tài)創(chuàng)建標(biāo)簽。
{% my_html "zzz" "xxx" %}
五、配置靜態(tài)文件
1、在項(xiàng)目根目錄下創(chuàng)建 statics 目錄。
2、在 settings 文件的最下方配置添加以下配置:
STATIC_URL = '/static/' # 別名 STATICFILES_DIRS = [ os.path.join(BASE_DIR, "statics"), ]
3、在 statics 目錄下創(chuàng)建 css 目錄,js 目錄,images 目錄,plugins 目錄, 分別放 css文件,js文件,圖片,插件。
4、把 bootstrap 框架放入插件目錄 plugins。
5、在 HTML 文件的 head 標(biāo)簽中引入 bootstrap。
注意:此時(shí)引用路徑中的要用配置文件中的別名 static,而不是目錄 statics。
<link rel="stylesheet" href="/static/plugins/bootstrap-3.3.7-dist/css/bootstrap.css" rel="external nofollow" >
在模板中使用需要加入 {% load static %} 代碼,以下實(shí)例我們從靜態(tài)目錄中引入圖片。
HelloWorld/HelloWorld/views.py 文件代碼:
from django.shortcuts import render def runoob(request): name ="菜鳥(niǎo)教程" return render(request, "runoob.html", {"name": name})
HelloWorld/templates/runoob.html 文件代碼:
{% load static %} {{name}}<img src="{% static "images/runoob-logo.png" %}" alt="runoob-logo">
再訪問(wèn)訪問(wèn) http://127.0.0.1:8000/runoob,可以看到頁(yè)面:
六、模板繼承
模板可以用繼承的方式來(lái)實(shí)現(xiàn)復(fù)用,減少冗余內(nèi)容。
網(wǎng)頁(yè)的頭部和尾部?jī)?nèi)容一般都是一致的,我們就可以通過(guò)模板繼承來(lái)實(shí)現(xiàn)復(fù)用。
父模板用于放置可重復(fù)利用的內(nèi)容,子模板繼承父模板的內(nèi)容,并放置自己的內(nèi)容。
1、父模板
標(biāo)簽 block...endblock: 父模板中的預(yù)留區(qū)域,該區(qū)域留給子模板填充差異性的內(nèi)容,不同預(yù)留區(qū)域名字不能相同。
{% block 名稱 %} 預(yù)留給子模板的區(qū)域,可以設(shè)置設(shè)置默認(rèn)內(nèi)容 {% endblock 名稱 %}
2、子模板
子模板使用標(biāo)簽 extends 繼承父模板:
{% extends "父模板路徑"%}
子模板如果沒(méi)有設(shè)置父模板預(yù)留區(qū)域的內(nèi)容,則使用在父模板設(shè)置的默認(rèn)內(nèi)容,當(dāng)然也可以都不設(shè)置,就為空。
子模板設(shè)置父模板預(yù)留區(qū)域的內(nèi)容:
{ % block 名稱 % } 內(nèi)容 {% endblock 名稱 %}
接下來(lái)我們先創(chuàng)建之前項(xiàng)目的 templates 目錄中添加 base.html 文件,代碼如下:
HelloWorld/templates/base.html 文件代碼:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>菜鳥(niǎo)教程(runoob.com)</title> </head> <body> <h1>Hello World!</h1> <p>菜鳥(niǎo)教程 Django 測(cè)試。</p> {% block mainbody %} <p>original</p> {% endblock %} </body> </html>
以上代碼中,名為 mainbody 的 block 標(biāo)簽是可以被繼承者們替換掉的部分。
所有的 {% block %} 標(biāo)簽告訴模板引擎,子模板可以重載這些部分。
runoob.html 中繼承 base.html,并替換特定 block,runoob.html 修改后的代碼如下:
HelloWorld/templates/runoob.html 文件代碼:
{%extends "base.html" %} {% block mainbody %} <p>繼承了 base.html 文件</p> {% endblock %}
第一行代碼說(shuō)明 runoob.html 繼承了 base.html 文件??梢钥吹?,這里相同名字的 block 標(biāo)簽用以替換 base.html 的相應(yīng) block。
重新訪問(wèn)地址 http://127.0.0.1:8000/runoob,輸出結(jié)果如下:
到此這篇關(guān)于Django框架模板用法的文章就介紹到這了。希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
Python 創(chuàng)建TCP服務(wù)器的方法
這篇文章主要介紹了Python 創(chuàng)建TCP服務(wù)器的方法,文中講解非常細(xì)致,代碼幫助大家更好的理解和學(xué)習(xí),感興趣的朋友可以了解下2020-07-07python將中文數(shù)字轉(zhuǎn)化成阿拉伯?dāng)?shù)字的簡(jiǎn)單方法
這篇文章主要給大家介紹了關(guān)于python如何將中文數(shù)字轉(zhuǎn)化成阿拉伯?dāng)?shù)字的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-03-03Go/Python/Erlang編程語(yǔ)言對(duì)比分析及示例代碼
這篇文章主要介紹了Go/Python/Erlang編程語(yǔ)言對(duì)比分析及示例代碼,本文重點(diǎn)是給大家介紹go語(yǔ)言,從語(yǔ)言對(duì)比分析的角度切入介紹,需要的朋友可以參考下2018-04-04Python OpenCV利用筆記本攝像頭實(shí)現(xiàn)人臉檢測(cè)
這篇文章主要為大家詳細(xì)介紹了Python OpenCV利用筆記本攝像頭實(shí)現(xiàn)人臉檢測(cè),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-04-04Python實(shí)現(xiàn)為Excel中每個(gè)單元格計(jì)算其在文件中的平均值
這篇文章主要為大家詳細(xì)介紹了如何基于Python語(yǔ)言實(shí)現(xiàn)對(duì)大量不同的Excel文件加以跨文件、逐單元格平均值計(jì)算,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下2023-10-10利用python實(shí)現(xiàn)PSO算法優(yōu)化二元函數(shù)
這篇文章主要介紹了python實(shí)現(xiàn)PSO算法優(yōu)化二元函數(shù)的代碼,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2019-11-11Python進(jìn)行圖片驗(yàn)證碼識(shí)別方法步驟
這篇文章主要給大家介紹了關(guān)于Python進(jìn)行圖片驗(yàn)證碼識(shí)別的相關(guān)資料,基于Python和OpenCV的驗(yàn)證碼識(shí)別系統(tǒng)具有重要的研究意義和實(shí)際應(yīng)用價(jià)值,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下2023-09-09