<menuitem id="bntx5"><thead id="bntx5"><i id="bntx5"></i></thead></menuitem>

    <nobr id="bntx5"></nobr><span id="bntx5"></span>

    <span id="bntx5"></span>
      <nobr id="bntx5"><delect id="bntx5"></delect></nobr>
      <nobr id="bntx5"></nobr>

      您現在所在的位置:首頁 >學習資源 > Python全棧+人工智能入門教材 > Python基礎入門教程72:實現視圖

      Python基礎入門教程72:實現視圖

      來源:奇酷教育 發表于:

      實現視圖視圖是一個簡單的 Python 方法,它接受一個請求對象,負責實現:任何業務邏輯(直接或間接)上下文字典,它包含模板數據使用一個

      實現視圖

      視圖是一個簡單的 Python 方法,它接受一個請求對象,負責實現:

      • 任何業務邏輯(直接或間接)
      • 上下文字典,它包含模板數據
      • 使用一個上下文來表示模板
      • 響應對象,它將所表示的結果返回到這個框架中

      在 Django 中,當一個 URL 被請求時,所調用的 Python 方法稱為一個視圖(view),這個視圖所加載并呈現的頁面稱為模板(template)。由于這個原因,Django 小組將 Django 稱為一個 MVT(model-view-template)框架。另一方面,TurboGears 把自己的方法稱作控制器(controller),將所呈現的模板稱為視圖(view),因此縮寫也是 MVC。其區別在于廣義的語義,因為它們所實現的內容是相同的。

      最簡單的視圖可能會返回一個使用字符串初始化過的 HttpResponse 對象。創建下面的方法,并生成一個 /jobs HTTP 請求,以確保 urls.py 和 views.py 文件都已經正確設置。

      清單 25. jobs/views.py (v1)
      1
      2
      3
      4
      from django.utils.httpwrappers import HttpResponse
       
      def index(request):
          return HttpResponse("Job Index View")

      下面的代碼將獲取最近的 10 個職位,并通過一個模板呈現出來,然后返回響應。沒有 下一節 中的模板文件,這段代碼就無法 正常工作。

      清單 26. jobs/views.py (v2)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      from django.template import Context, loader
      from django.http import HttpResponse
      from jobs.models import Job
       
      from django.template import Context, loader
      from django.http import HttpResponse
      from jobs.models import Job
       
      def index(request):
          object_list = Job.objects.order_by('-pub_date')[:10]
          t = loader.get_template('jobs/job_list.html')
          c = Context({
              'object_list': object_list,
          })
          return HttpResponse(t.render(c))

      在上面的代碼中,模板是由 jobs/job_list.html 字符串進行命名的。該模板是使用名為 object_list的職位列表的上下文呈現的。所呈現的模板字符串隨后被傳遞到 HTTPResponse 構造器中,后者通過這個框架被發送回請求客戶機那里。

      加載模板、創建內容以及返回新響應對象的步驟在下面都被 render_to_response 方法取代了。新增內容是詳細視圖方法使用了一個 get_object_or_404 方法,通過該方法使用所提供的參數獲取一個 Job 對象。如果沒有找到這個對象,就會觸發 404 異常。這兩個方法減少了很多 Web 應用程序中的樣板代碼。

      清單 27. jobs/views.py (v3)
      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      from django.shortcuts import get_object_or_404, render_to_response
      from jobs.models import Job
       
      def index(request):
          object_list = Job.objects.order_by('-pub_date')[:10]
          return render_to_response('jobs/job_list.html',
                                    {'object_list': object_list})
       
      def detail(request, object_id):
          job = get_object_or_404(Job, pk=object_id)
          return render_to_response('jobs/job_detail.html',
                                    {'object': job})

      注意,detail 使用 object_id 作為一個參數。這是前面提到過的 jobs urls.py 文件中 /jobs/ URL 路徑后面的數字。它以后會作為主鍵(pk)傳遞給 get_object_or_404 方法。

      上面的視圖仍然會失敗,因為它們所加載和呈現的模板(jobs/job_list.html and jobs/job_detail.html)不存在。

      久久综合伊人77777麻豆,久久精品农村毛片,精品国产成a人在线观看黄,中文字幕av一区中文字幕天堂