精品专区-精品自拍9-精品自拍三级乱伦-精品自拍视频-精品自拍视频曝光-精品自拍小视频

網站建設資訊

NEWS

網站建設資訊

Django模板語言-1:一個完整的數據獲取例子

一、Django表單(form)請求:

創新互聯建站是一家集網站設計制作、成都網站設計、網站頁面設計、網站優化SEO優化為一體的專業網站制作公司,已為成都等多地近百家企業提供網站建設服務。追求良好的瀏覽體驗,以探求精品塑造與理念升華,設計最適合用戶的網站頁面。 合作只是第一步,服務才是根本,我們始終堅持講誠信,負責任的原則,為您進行細心、貼心、認真的服務,與眾多客戶在蓬勃發展的市場環境中,互促共生。

????打開的時候默認是GET請求,獲取form表單的內容。

????點提交的時候是POST請求,提交form表單的內容。

????根據以上區別來編寫獲取表單內容:

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

{{error_msg}}

三、HTML讀取字典數據和列表

? ? ? ? 字典:使用? .? 讀取讀典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:

{{dictname.name}}

????????????\\櫻

{{dictname.age}}

?????????????\\19

{{dictname.mail}}

????????????\\ying@126.com

????????列表HTML

{{list_name.0}}

????????????\\football

{{list_name.1}}

????????????\\sing

{{list_name.2}}

????????????\\cook

四、HTML中for循環:

???? ???使用{%%}標記循環語句,并且使用{%endfor%}聲明循環結束

??????????reversed:列表反向迭代

{%for?k,?v?in?dict_name%}
????\\HTML內容
????

{{k}}:{{v}}

{%endfor%}
//views.py
return?render(request,?'index.html',?{'list_name':['a','b','c']})

{%for?i?in?list_name%}
????

{{i}}

????????//a,b,c {%endfor%}

????1、empty ,for自帶的條件判斷,列表為空執行

#?list_name?=?[1,2,3,4]
{%?for?i?in??list_name?reversed%}????????#?reversed反向迭代,
????

{{?list_name.pop?}}

???????????#?pop是后入先出 {%?empty?%} ????

null

{%?endfor?%} ???? #?結果:1234,正常結束,循環結束時列表為空,但是,不會執行empty語句,因為先判斷,再使用pop刪元素 {%?for?i?in?list_name?%} ????

?has?value?{{?list_name?}}

{%?empty?%} ????

?is?null?{{?list_name?}}

{%?endfor?%} #?結果:is?null?[],執行empty,因為第一次判斷的時候列表就是空的

????2、對多元數組解包:

#?dyadic?=?[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
{%?for?x,y,z,k?in?dyadic?%}
????

{{?x?}},?{{?y?}},?{{?z?}},{{?k?}}

{%?endfor?%} #?結果: 1,?2,?3,4 5,?6,?7,8 9,?10,?11,12

????3、forloop,獲取for循環的統計信息,一般用于列表,因為字典是無序的。

#?dyadic?=?[[1,2,3,4],[5,6,7,8],[9,10,11,12]]
#?counter,獲取列表索引,從1開始
{%?for?i?in?dyadic?%}????????????????????#?結果:1?2?3?
????{{?forloop.counter?}}
{%?endfor?%}

#?counter0,獲取列表索引,從0開始
{%?for?i?in?dyadic?%}???????????????????#?結果:0?1?2
????{{?forloop.counter0?}}
{%?endfor?%}

#?revcounter,獲取返向索引,從n開始
{%?for?i?in?dyadic?%}????????????????????#?結果:3?2?1?
????{{?forloop.revcounter?}}
{%?endfor?%}

#?revcounter,獲取返向索引,從n-1開始
{%?for?i?in?dyadic?%}????????????????????#?結果:2?1?0
????{{?forloop.revcounter0?}}
{%?endfor?%}

#?first?當前循環是首個元素為True
{%?for?i?in?dyadic?%}?????????????????????????#?結果:1?2?3?(1是紅色標記)
????{%?if?forloop.first?%}
????????{{?forloop.counter?}}
????{%?else?%}
????????{{?forloop.counter?}}
????{%?endif?%}
{%?endfor?%}????????

#?last?當前循環是最后一個元素為True,例如生成鏈接表時,最后一個不加分割符|
{%?for?i?in?dyadic?%}???????#?結果?link?|?link?|?link?
????{%?if?forloop.last?%}
????????link
????{%?else?%}
????????link?|
????{%?endif?%}
{%?endfor?%}


#?parentloop?獲取上一級for?循環的信息
{%?for?i?in?dyadic?%}
????{%?for?j?in?i?%}
????????{%?if?forloop.parentloop.first?%}????????????????#?判斷當前i是否是dyadic的第一個元素
????????????{{?j?}}??????#?如果是,紅色標記
????????{%?else?%}
????????????{{?j?}}
????????{%?endif?%}
????{%?endfor?%}
????
{%?endfor?%} #?結果: 1?2?3?4?(第一行全是紅字) 5?6?7?8? 9?10?11?12

五、HTML中if判斷:

{%if?條件1?%}
????\\HTML內容
????

{{k}}:{{v}}

{%elif?條件2%} ????... {%else%} ????... {%endfor%}

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

{%?if?list_name?%}????????#?list_name是變量名
????

true

{%?else?%} ????

false

{%?endif?%}

????2、elif 條件并列

{%?with?list_name='OK'?%}????????????????#?使用with給變量賦值
????{%?if?list_name?==?'NO'?%}
????????

1

????{%?elif??list_name?==?'OK'?%}????????#?結果顯示OK ????????

OK

????{%?else?%} ????????

others

????{%?endif?%} {%?endwith?%}

六、HTML模板繼承:

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

????

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

????{%block tagname%}內容{%endblock%}

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

????include:直接套網頁,直接組合,網頁的變量也跟隨當前網頁

????{%include 'tag.html'%}

#?c.html
{%?for?i?in?page_str?%}
{%?include?'hw1/mb.html'?%}
{%?endfor?%}

#?d.html
{{?i?}}

#?結果:d.html里的i直接使用c.html?變量

七、views.py獲取html模板傳入的數據

????html提交的數據方法有很多種,一般使用兩類:POST和GET

????????1、POST方法請求:一般用于修改、更新數據。

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

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

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

? ?? views.py獲取數據方法:

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

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

def?get_data(request):
????get_post?=?request.POST.get('user_name')?????????????#?獲取HTML元素名為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()迭代器讀取數據塊,使用for循環讀取所有數據,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():???????????#?循環讀取chunks迭代器數據。
????????f.write(i)
????f.close()

????????獲取用戶請求的數據“

????????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、獲取用戶環境信息:

????????????request.environ

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

八、views.py函數返回網址:

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

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

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

????3、HttpResponse:返回HTML的字符串,格式:HttpResponse('

這只是一個例子

')

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

警告!

')

上傳文件示例:

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,跳轉到index目錄下的views.py下的mains函數
????##?url(?r'',index.views.mains),????????????????????????#?http://ip,跳轉到index目錄下的views.py下的mains函數
????url(r'^mains/up$',?index.views.rev_file)???????#?r'^??$'定義^開頭$結尾,否則,所有包含此單詞的地址都轉向,容易混淆
]

index.html

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




????
????Title


??
?//action,跳轉到的網址,action="/up"代表?根目錄+up;action="up"代表?當前網址+up
?????????????
?//enctype,form表單可接收文件?????????????
????
????
????//type="file",代表可以上傳文件型數據
????

????????文件分類: ????????軟件 ????????HTML ????????編程 ????

????//創建多選框 ???? {%?if?f_name?%}????????//使用if判斷是否上傳文件,上傳文件,顯示信息

{{?u_name?}},Your?file:{{?f_name?}}?Upload?Successful!

分類: ????{%?for?i?in?f_type?%}????????????//使用for讀取選擇的文件分類? ????????{{?i?}} ????{%?endfor?%}???????????????????? {%?else?%}???????????????????????????//未上傳文件提示

You?don't?upload?file!

{%?endif?%}

test/views.py

from?django.shortcuts?import?render
import?os
#?Create?your?views?here.

def?mains(request):
????#?首次打開網址,進入的index.html頁面
????return?render(request,?'index.html')

def?rev_file(request):
????#?接收form表單提交的數據
????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選項的數據
????????????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的內容,但瀏覽器網址會變,內容也會出現if語句的內容

request其它方法:

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


文章題目:Django模板語言-1:一個完整的數據獲取例子
轉載來于:http://m.jcarcd.cn/article/pcidcs.html
主站蜘蛛池模板: 品一二三产区 | 91美女艹比 | 日韩三区在线观看 | 成人精品国产亚洲 | 国产不卡视频在线 | 丝袜美腿中文字幕 | 欧美日韩视频网站 | 无码av免费一区二区三区 | 欧洲1区2区3区 | 国产国语一级 | 国产精品高朝1 | 国产在线观看色窝网 | 国产情侣自拍小视频 | 69精品一区二区 | 国产福利一区二区久 | 国产日韩成| 国产主播福利大全 | 午夜日韩福利在线 | 1024国产在线 | 成人精品一区二区三 | 精品国产呦 | 无码精品视频 | 无码成人午夜在线观看 | 日本一区二区成人 | 国产每日更 | 国产69精品 | 日韩最新| 女同另类激情重口 | 国产日韩z| 国产高清亚 | 欧美一级国 | 国产高清自拍在线 | 成人免费观看视 | 日韩精品中文字幕 | 成人一级午夜激情网 | 欧美日韩精品网 | 日韩在线午夜专区 | 欧美日韩在线亚洲 | 成人精品色在线 | 国产一区国产二区 | 歐美一區二區三區 |