Django模板語言-1:一個完整的數(shù)據(jù)獲取例子-創(chuàng)新互聯(lián)

一、Django表單(form)請求:

成都創(chuàng)新互聯(lián)長期為1000多家客戶提供的網(wǎng)站建設(shè)服務,團隊從業(yè)經(jīng)驗10年,關(guān)注不同地域、不同群體,并針對不同對象提供差異化的產(chǎn)品和服務;打造開放共贏平臺,與合作伙伴共同營造健康的互聯(lián)網(wǎng)生態(tài)環(huán)境。為龍亭企業(yè)提供專業(yè)的成都網(wǎng)站設(shè)計、成都做網(wǎng)站,龍亭網(wǎng)站改版等技術(shù)服務。擁有十年豐富建站經(jīng)驗和眾多成功案例,為您定制開發(fā)。

打開的時候默認是GET請求,獲取form表單的內(nèi)容。

點提交的時候是POST請求,提交form表單的內(nèi)容。

根據(jù)以上區(qū)別來編寫獲取表單內(nèi)容:

from?django.shortcuts?import?HttpResponse from?django.shortcuts?import?render,?redirect def?login(request): ????#?request包含用戶提交的所有信息。 ????error_msg?=?'' ????if?request.method?==?'POST': ????????user?=?request.POST.get('user',?None)????????//使用get方法獲取'user'鍵值,如果沒有user鍵,賦值None ????????pwd?=?request.POST.get('pwd',?None)??????????//get方法里的user和pwd是form表單里input對象的name屬性。 ????????if?user?==?'123'?and?pwd?==?'123456': ????????????return?redirect('http://www.baidu.com') ????????else: ????????????error_msg?=?'用戶名或密碼錯誤' ???? ????return?render(request,?'login.html',?{'error_msg':error_msg})

二、{{key}}

{{}}在html文件中指定key,通過views.py傳遞字典,html在客戶端顯示的是典對應的key值。

HTML

<span>{{error_msg}}<span>

三、HTML讀取字典數(shù)據(jù)和列表

字典:使用? .? 讀取讀典key:? dict_name.key

列表:使用 .索引讀取,list_name.0

views.py

def?show(request): ????dict_name?=?{'name':'櫻',?'age':19,?'mail':'ying@126.com',?'fav':['football',?'sing',?'cook']} ????return?render(request,'home.html',?dict_name)

字典HTML:

<p>{{dictname.name}}</p>????????????\\櫻 <p>{{dictname.age}}</p>?????????????\\19 <p>{{dictname.mail}}</p>????????????\\ying@126.com

列表HTML

<p>{{list_name.0}}</p>????????????\\football <p>{{list_name.1}}</p>????????????\\sing <p>{{list_name.2}}</p>????????????\\cook

四、HTML中for循環(huán):

???使用{%%}標記循環(huán)語句,并且使用{%endfor%}聲明循環(huán)結(jié)束

reversed:列表反向迭代

{%for?k,?v?in?dict_name%} ????\\HTML內(nèi)容 ????<p>{{k}}:{{v}}</p> {%endfor%}//views.py return?render(request,?'index.html',?{'list_name':['a','b','c']}) {%for?i?in?list_name%} ????<p>{{i}}</p>????????//a,b,c {%endfor%}

1、empty ,for自帶的條件判斷,列表為空執(zhí)行

#?list_name?=?[1,2,3,4] {%?for?i?in??list_name?reversed%}????????#?reversed反向迭代, ????<P>{{?list_name.pop?}}</P>???????????#?pop是后入先出 {%?empty?%} ????<P>null</P> {%?endfor?%} ???? #?結(jié)果:1234,正常結(jié)束,循環(huán)結(jié)束時列表為空,但是,不會執(zhí)行empty語句,因為先判斷,再使用pop刪元素 {%?for?i?in?list_name?%} ????<P>?has?value?{{?list_name?}}</P> {%?empty?%} ????<P>?is?null?{{?list_name?}}</P> {%?endfor?%} #?結(jié)果:is?null?[],執(zhí)行empty,因為第一次判斷的時候列表就是空的

2、對多元數(shù)組解包:

#?dyadic?=?[[1,2,3,4],[5,6,7,8],[9,10,11,12]] {%?for?x,y,z,k?in?dyadic?%} ????<P>{{?x?}},?{{?y?}},?{{?z?}},{{?k?}}</P> {%?endfor?%} #?結(jié)果: 1,?2,?3,4 5,?6,?7,8 9,?10,?11,12

3、forloop,獲取for循環(huán)的統(tǒng)計信息,一般用于列表,因為字典是無序的。

#?dyadic?=?[[1,2,3,4],[5,6,7,8],[9,10,11,12]] #?counter,獲取列表索引,從1開始 {%?for?i?in?dyadic?%}????????????????????#?結(jié)果:1?2?3? ????{{?forloop.counter?}} {%?endfor?%} #?counter0,獲取列表索引,從0開始 {%?for?i?in?dyadic?%}???????????????????#?結(jié)果:0?1?2 ????{{?forloop.counter0?}} {%?endfor?%} #?revcounter,獲取返向索引,從n開始 {%?for?i?in?dyadic?%}????????????????????#?結(jié)果:3?2?1? ????{{?forloop.revcounter?}} {%?endfor?%} #?revcounter,獲取返向索引,從n-1開始 {%?for?i?in?dyadic?%}????????????????????#?結(jié)果:2?1?0 ????{{?forloop.revcounter0?}} {%?endfor?%} #?first?當前循環(huán)是首個元素為True {%?for?i?in?dyadic?%}?????????????????????????#?結(jié)果:1?2?3?(1是紅色標記) ????{%?if?forloop.first?%} ????????<span?>{{?forloop.counter?}}</span> ????{%?else?%} ????????<span?>{{?forloop.counter?}}</span> ????{%?endif?%} {%?endfor?%}???????? #?last?當前循環(huán)是最后一個元素為True,例如生成鏈接表時,最后一個不加分割符| {%?for?i?in?dyadic?%}???????#?結(jié)果?link?|?link?|?link? ????{%?if?forloop.last?%} ????????<span?>link</span> ????{%?else?%} ????????<a?href="#"?>link</a>?| ????{%?endif?%} {%?endfor?%} #?parentloop?獲取上一級for?循環(huán)的信息 {%?for?i?in?dyadic?%} ????{%?for?j?in?i?%} ????????{%?if?forloop.parentloop.first?%}????????????????#?判斷當前i是否是dyadic的第一個元素 ????????????<span?>{{?j?}}</span>??????#?如果是,紅色標記 ????????{%?else?%} ????????????<span?>{{?j?}}</span> ????????{%?endif?%} ????{%?endfor?%} ????<br> {%?endfor?%} #?結(jié)果: 1?2?3?4?(第一行全是紅字) 5?6?7?8? 9?10?11?12

五、HTML中if判斷:

{%if?條件1?%} ????\\HTML內(nèi)容 ????<p>{{k}}:{{v}}</p> {%elif?條件2%} ????... {%else%} ????... {%endfor%}

1、判斷變量是否為空或False:

{%?if?list_name?%}????????#?list_name是變量名 ????<P>true</P> {%?else?%} ????<P>false</P> {%?endif?%}

2、elif 條件并列

{%?with?list_name='OK'?%}????????????????#?使用with給變量賦值 ????{%?if?list_name?==?'NO'?%} ????????<P>1</P> ????{%?elif??list_name?==?'OK'?%}????????#?結(jié)果顯示OK ????????<P>OK</P> ????{%?else?%} ????????<P>others</P> ????{%?endif?%} {%?endwith?%}

六、HTML模板繼承:

主:{%block tagname%}{%endblock%}

子:聲明繼承{%extends 'mastr.html'%},只能繼承一個母板

{%block tagname%}內(nèi)容{%endblock%}

子繼承主的時候,使用block括起來的內(nèi)容 ,替換主的相應tagname位置。

include:直接套網(wǎng)頁,直接組合,網(wǎng)頁的變量也跟隨當前網(wǎng)頁

{%include 'tag.html'%}

#?c.html {%?for?i?in?page_str?%} {%?include?'hw1/mb.html'?%} {%?endfor?%} #?d.html {{?i?}} #?結(jié)果:d.html里的i直接使用c.html?變量

七、views.py獲取html模板傳入的數(shù)據(jù)

html提交的數(shù)據(jù)方法有很多種,一般使用兩類:POST和GET

1、POST方法請求:一般用于修改、更新數(shù)據(jù)。

2、GET方法請求:以網(wǎng)址顯示方式提交,例:http:\\localhost\hw\?id=1&name=david,一般用于向服務器請求數(shù)據(jù)

3、其它。put,delete,head,option....

4、上傳文件類型的數(shù)據(jù),在Form表單指定-->enctype='multipart/form-data'

views.py獲取數(shù)據(jù)方法:

1、POST.get('name','默認值'),獲取元素的唯一值,如果沒有,賦默認值

2、POST.getlist('name','默認值'),獲取多值元素的列表,如果沒有,賦默認值

def?get_data(request): ????get_post?=?request.POST.get('user_name')?????????????#?獲取HTML元素名為user_name的值?,<input?name='user_name'> ????get_post?=?request.POST.get('user_name',None)????????#?找不到user_name元素,返回None ????get_list?=?request.POST.getlist('favor')???????????????????????#?獲取checkbox,multiple的HTML值 ????get_get?=?request.GET.get('user_name')?????????????#?同上 ????get_get?=?request.GET.get('user_name',None)????????#?同上 ????get_get?=?request.GET.getlist('user_name')

??? 3、FILES.get('name'),獲取上傳的文件對象,默認顯示文件名,
??? ??? ??? obj.name顯示上傳的文件名,
??? ??? ??? obj.chunks()迭代器讀取數(shù)據(jù)塊,使用for循環(huán)讀取所有數(shù)據(jù),for r in obj.chunks()

def?get_file(request): ????obj?=?request.FILES.get('file_obj') ????f?=?open(obj.name,?'wb+')????????#?以上傳的文件名命名。 ????for?i?in?obj.chunks():???????????#?循環(huán)讀取chunks迭代器數(shù)據(jù)。 ????????f.write(i) ????f.close()

獲取用戶請求的數(shù)據(jù)“

1、獲取文件文件

file_obj = request.FILES.get()

file_obj.name

file_obj.size

file_obj.chunks()

2、獲取form表單

request.path_info

request.POST.getlist()

request.GET.get()

3、獲取用戶環(huán)境信息:

request.environ

for k,v =request.environ.items():

八、views.py函數(shù)返回網(wǎng)址:

1、render:HTML模板路徑,格式:render(request,'HTML模板名',傳遞的字典)

2、redirect:返回一個完整的URL(本地或網(wǎng)絡地址) ,格式:redirect('http://www.baidu.com')或redirect('/test/') ,

????test前面的/代表根,不加/當前的下級目錄?

3、HttpResponse:返回HTML的字符串,格式:HttpResponse('<p>這只是一個例子</p>')

def?show_data(request): ????v=1234 ????#?站內(nèi)跳轉(zhuǎn) ????return?render(request,'index.html',{"dict":v}) ????#?站外跳轉(zhuǎn) ????return?redirect('http://www.baidu.com') ???? ????#?跳轉(zhuǎn)站內(nèi)根路徑,http://ip/blog ????return?redirect('/blog') ???? ????#?跳轉(zhuǎn)站內(nèi)當前路徑下一級,比如當前是http://ip/show,跳轉(zhuǎn)到http://ip/show/blog ????return?redirect('blog/') ???? ????#?直接返回HTML字符串。 ????return?HttpResponse('<p>警告!</p>')

上傳文件示例:

urls.py

from?django.conf.urls?import?url from?django.contrib?import?admin import?index.views urlpatterns?=?[ ????url(r'^admin/',?admin.site.urls), ????url(?r'^mains$',index.views.mains),????????????#?http://ip/mians,跳轉(zhuǎn)到index目錄下的views.py下的mains函數(shù) ????##?url(?r'',index.views.mains),????????????????????????#?http://ip,跳轉(zhuǎn)到index目錄下的views.py下的mains函數(shù) ????url(r'^mains/up$',?index.views.rev_file)???????#?r'^??$'定義^開頭$結(jié)尾,否則,所有包含此單詞的地址都轉(zhuǎn)向,容易混淆 ]

index.html

使用了{{}},{%%},模板語言。同時上傳

<!DOCTYPE?html> <html?lang="en"> <head> ????<meta?charset="UTF-8"> ????<title>Title</title> </head> <body> <form?action="up"?enctype="multipart/form-data"?method="post">?? ?//action,跳轉(zhuǎn)到的網(wǎng)址,action="/up"代表?根目錄+up;action="up"代表?當前網(wǎng)址+up ????????????? ?//enctype,form表單可接收文件????????????? ????<input?type="text"?name="user_name"?placeholder="Input?your?name..."?/> ????<input?name="up_file"?type="file"/> ????//type="file",代表可以上傳文件型數(shù)據(jù) ????<p> ????????文件分類: ????????軟件<input?type="checkbox"?value="技術(shù)"?name="f_type"> ????????HTML<input?type="checkbox"?value="HTML"?name="f_type"> ????????編程<input?type="checkbox"?value="編程"?name="f_type"> ????</p> ????//創(chuàng)建多選框 ????<input?type="submit"?value="提交"> </form> {%?if?f_name?%}????????//使用if判斷是否上傳文件,上傳文件,顯示信息 <p><span?>{{?u_name?}}</span>,Your?file:{{?f_name?}}?Upload?Successful!</p> 分類: ????{%?for?i?in?f_type?%}????????????//使用for讀取選擇的文件分類? ????????{{?i?}} ????{%?endfor?%}???????????????????? {%?else?%}???????????????????????????//未上傳文件提示 <p><span>You?don't?upload?file!</span></p> {%?endif?%} </body> </html>

test/views.py

from?django.shortcuts?import?render import?os #?Create?your?views?here. def?mains(request): ????#?首次打開網(wǎng)址,進入的index.html頁面 ????return?render(request,?'index.html') def?rev_file(request): ????#?接收form表單提交的數(shù)據(jù) ????f_name?=?'' ????u_name?=?'' ????f_type?=?'' ????if?request.method?==?'POST': ????????f_obj?=?request.FILES.get('up_file',?None)???????????? ????????#?獲取file對象,print(f_obj)是文件名,但實際是對象,因為FILES定義了__repr__或__str__ ????????if?f_obj: ????????????#如果有上傳的文件 ????????????f_name?=?f_obj.name ????????????u_name?=?request.POST.get('user_name',?None) ????????????f_type?=?request.POST.getlist('f_type')????????????#獲取checkbox或multiple類型的option選項的數(shù)據(jù) ????????????f?=?open(os.path.join('upload',?f_name),?'wb+')????#manage.py同級目錄的upload文件夾 ????????????for?i?in?f_obj.chunks():???????????????????????????#chunks(),迭代器,使用for讀取 ????????????????f.write(i) ????????????f.close() ????return?render(request,?'index.html',?{'f_name':?f_name,?'u_name':?u_name,?'f_type':?f_type}) ????#?再返回index.html的內(nèi)容,但瀏覽器網(wǎng)址會變,內(nèi)容也會出現(xiàn)if語句的內(nèi)容

request其它方法:

request.GET
  request.POST
  request.method
  request.body? ? ?原始數(shù)據(jù)
  request.path # /upload/
  request.get_full_path() # /upload/?id=1
  request.META? ? ?網(wǎng)頁原信息
  request.FILES? ? ?文件

另外有需要云服務器可以了解下創(chuàng)新互聯(lián)cdcxhl.cn,海內(nèi)外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。

當前題目:Django模板語言-1:一個完整的數(shù)據(jù)獲取例子-創(chuàng)新互聯(lián)
文章地址:http://www.muchs.cn/article28/dcdcjp.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供用戶體驗網(wǎng)站排名、云服務器、搜索引擎優(yōu)化關(guān)鍵詞優(yōu)化、網(wǎng)站改版

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

搜索引擎優(yōu)化