日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Django视图、URL、模版简介

發布時間:2024/4/11 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Django视图、URL、模版简介 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

Django視圖、URL、模版簡介

文章目錄

  • Django視圖、URL、模版簡介
    • 一、視圖
      • 1.簡介
      • 2.使用視圖時需要進行兩步操作:
      • 3.定義視圖
    • 二、配置URLconf
      • 1.查找視圖的過程
      • 2.URLconf
      • 3.需要兩步完成URLconf配置:
      • 4.url匹配的過程
      • 5.請求訪問
    • 三、模板
      • 1.簡介
      • 2.創建模板
      • 3.定義模板
      • 4.視圖調用模板
      • 5.視圖調用模板簡寫
    • 四、案例

一、視圖

1.簡介

  • 后臺管理頁面做好了,接下來就要做公共訪問的頁面了。當我們剛剛在瀏覽器中輸入http://127.0.0.1:8000/admin/ 之后,瀏覽器顯示出了后臺管理的登錄頁面
  • 那有沒有同學想過這個服務器是怎么給我們找到這個頁面并返回呢?
  • /admin/是我們想要請求的頁面,服務器在收到這個請求之后,就一定對應著一個處理動作,這個處理動作就是幫我們產生頁面內容并返回回來,這個過程是由視圖來做的。
  • 對于django的設計框架MVT,用戶在URL中請求的是視圖,視圖接收請求后進行處理,并將處理的結果返回給請求者。

2.使用視圖時需要進行兩步操作:

  • 1.定義視圖函數
  • 2.配置URLconf

3.定義視圖

  • 視圖就是一個Python函數,被定義在views.py中。
  • 視圖的必須有一個參數,一般叫request,視圖必須返回HttpResponse對象,HttpResponse中的參數內容會顯示在瀏覽器的頁面上。

打開booktest/views.py文件,定義視圖index如下

from django.http import HttpResponsedef index(request):return HttpResponse("index")

二、配置URLconf

1.查找視圖的過程

  • 請求者在瀏覽器地址欄中輸入url
  • 請求到服務器后,獲取url信息,然后與編寫好的URLconf逐條匹配
  • 如果匹配成功則調用對應的視圖函數,如果所有的URLconf都沒有匹配成功,則返回404錯誤。

2.URLconf

一條URLconf包括url規則、視圖兩部分:

  • url規則使用正則表達式定義。
  • 視圖就是在views.py中定義的視圖函數。

3.需要兩步完成URLconf配置:

url配置的目的是讓建立url和視圖函數的對應關系。url配置項定義在urlpatterns的列表中,每一個配置項都調用url函數。

  • 1.url(正則表達式,視圖函數名)
  • 2.url(正則表達式,include(應用中的urls文件))

工作中在配置url時,首先在項目的urls.py文件中添加配置項時,并不寫具體的url和視圖函數之間的對應關系,而是包含具體應用的urls.py文件,在應用的urls.py文件中寫url和視圖函數的對應關系。

在booktest/應用下創建urls.py文件,定義代碼如下:

from django.conf.urls import url from booktest import views urlpatterns = [url(r'^$', views.index), ]

包含到項目中:打開test1/urls.py文件,為urlpatterns列表增加項如下:

url(r'^', include('booktest.urls')),

test1/urls.py文件完整代碼如下:

from django.conf.urls import include, url from django.contrib import adminurlpatterns = [url(r'^admin/', include(admin.site.urls)),url(r'^', include('booktest.urls')), ]

4.url匹配的過程

在項目的urls.py文件中包含具體應用的urls.py文件,應用的urls.py文件中寫url和視圖函數的對應關系。

5.請求訪問

視圖和URLconf都定義好了,接下來在瀏覽器地址欄中輸入網址:

http://127.0.0.1:8000/

網頁顯示效果如下圖,視圖被成功執行了。

三、模板

1.簡介

問題 :
如何向請求者返回一個漂亮的頁面呢?

  • 肯定需要用到html、css,如果想要更炫的效果還要加入js,
  • 問題來了,這么一堆字段串全都寫到視圖中,作為HttpResponse()的參數嗎?這樣定義就太麻煩了吧,因為定義字符串是不會出任何效果和錯誤的,
  • 如果有一個專門定義前端頁面的地方就好了。
  • 解決問題的技術來了:模板
  • 在Django中,將前端的內容定義在模板中,然后再把模板交給視圖調用,各種漂亮、炫酷的效果就出現了。

2.創建模板

為應用booktest下的視圖index創建模板index.html,目錄結構如下圖:

設置查找模板的路徑:打開test1/settings.py文件,設置TEMPLATES的DIRS值

'DIRS': [os.path.join(BASE_DIR, 'templates')],

3.定義模板

打開templtes/booktest/index.html文件,定義代碼如下

<html> <head><title>圖書列表</title> </head> <body> <h1>{{title}}</h1> {%for i in list%} {{i}}<br> {%endfor%} </body> </html>
  • 在模板中輸出變量語法如下,變量可能是從視圖中傳遞過來的,也可能是在模板中定義的。
{{變量名}}
  • 在模板中編寫代碼段語法如下:
{%代碼段%}

4.視圖調用模板

調用模板分為三步驟:

  • 1.找到模板(去模板目錄下面獲取html文件的內容,得到一個模板對象)
  • 2.定義上下文(向模板文件傳遞數據)
  • 3.渲染模板(得到一個標準的html內容)

打開booktst/views.py文件,調用上面定義的模板文件

from django.http import HttpResponse from django.template import loader,RequestContextdef index(request):# 1.獲取模板template=loader.get_template('booktest/index.html')# 2.定義上下文context=RequestContext(request,{'title':'圖書列表','list':range(10)})# 3.渲染模板return HttpResponse(template.render(context))

打開瀏覽器刷新頁面,顯示效果如下圖:

5.視圖調用模板簡寫

視圖調用模板都要執行以上三部分,于是Django提供了一個函數render封裝了以上代碼。 方法render包含3個參數:

  • 第一個參數為request對象
  • 第二個參數為模板文件路徑
  • 第三個參數為字典,表示向模板中傳遞的上下文數據

打開booktst/views.py文件,調用render的代碼如下

from django.shortcuts import renderdef index(request):context={'title':'圖書列表','list':range(10)}return render(request,'booktest/index.html',context)

四、案例

  • 定義視圖

編寫booktest/views.py文件如下:

from django.shortcuts import render from booktest.models import BookInfo#首頁,展示所有圖書 def index(reqeust):#查詢所有圖書booklist = BookInfo.objects.all()#將圖書列表傳遞到模板中,然后渲染模板return render(reqeust, 'booktest/index.html', {'booklist': booklist})#詳細頁,接收圖書的編號,根據編號查詢,再通過關系找到本圖書的所有英雄并展示 def detail(reqeust, bid):#根據圖書編號對應圖書book = BookInfo.objects.get(id=int(bid))#查找book圖書中的所有英雄信息heros = book.heroinfo_set.all()#將圖書信息傳遞到模板中,然后渲染模板return render(reqeust, 'booktest/detail.html', {'book':book,'heros':heros})
  • 定義URLconf

編寫booktest/urls.py文件如下:

from django.conf.urls import url #引入視圖模塊 from booktest import views urlpatterns = [#配置首頁urlurl(r'^$', views.index),#配置詳細頁url,\d+表示多個數字,小括號用于取值,建議復習下正則表達式url(r'^(\d+)/$',views.detail), ]
  • 定義模板

編寫templates/booktest/index.html文件如下:

<html> <head><title>首頁</title> </head> <body> <h1>圖書列表</h1> <ul>{#遍歷圖書列表#}{%for book in booklist%}<li>{#輸出圖書名稱,并設置超鏈接,鏈接地址是一個數字#}<a href="/{{book.id}}/">{{book.btitle}}</a></li>{%endfor%} </ul> </body> </html>

編寫templates/booktest/detail.html文件如下:

<html> <head><title>詳細頁</title> </head> <body> {#輸出圖書標題#} <h1>{{book.btitle}}</h1> <ul>{#通過關系找到本圖書的所有英雄,并遍歷#}{%for hero in heros%}{#輸出英雄的姓名及描述#}<li>{{hero.hname}}---{{hero.hcomment}}</li>{%endfor%} </ul> </body> </html>

總結

以上是生活随笔為你收集整理的Django视图、URL、模版简介的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。