ユーザ用ツール

サイト用ツール


メモ:django2

差分

このページの2つのバージョン間の差分を表示します。

この比較画面へのリンク

両方とも前のリビジョン前のリビジョン
メモ:django2 [2019/05/31 16:11] – [テンプレートの利用] Wiki Editorメモ:django2 [2019/05/31 18:01] (現在) – [Viewの一般的な利用] Wiki Editor
行 88: 行 88:
 ===== Viewの一般的な利用 ===== ===== Viewの一般的な利用 =====
 ここまででViewの実践的な使い方の基本を理解したが、Viewからテンプレートで使う変数をcontextとして渡してページを生成する手順は非常によく使うパターンである。そのため、Djangoではショートカットという形で簡略化した呼び出し方法が用意されている。 ここまででViewの実践的な使い方の基本を理解したが、Viewからテンプレートで使う変数をcontextとして渡してページを生成する手順は非常によく使うパターンである。そのため、Djangoではショートカットという形で簡略化した呼び出し方法が用意されている。
 +
 +report/views.py
 +  #from django.http import HttpResponse
 +  #from django.template import loader
 +  from .models import ReportContents
 +  
 +  def index(request):
 +      r_list = ReportContents.objects.order_by('hs_code')[:5]
 +      context = {'r_list': r_list}
 +      return render(request, 'report/index.html', context)
 +
 +render関数が必要なHttpResponseオブジェクトを生成してくれる。render関数にrequestオブジェクト、テンプレート、コンテキストとして辞書を渡せば、必要なHttpResponseを生成する。
 +
 +render関数でショートカットする場合、HttpResponseやloaderをインポートしなくてもよい。
 +
 +===== 404エラー =====
 +データを検索したりして、指定されたデータがなかったり問題がある場合には、HTTPエラーを返したい場合がある。
 +
 +reort/views.py
 +  from django.http import Http404
 +  
 +  def detail(request, ReportContents_id):
 +      try:
 +          Rep = ReportContents.objects.get(pk=ReportContents_id)
 +      except ReportContents.DoesNotExist:
 +          raise Http404("Data does not exist")
 +      return render(request, 'report/detail.html', {'Rep':Rep})
 +
 +ここではURL経由で受け取ったIDに基づいてモデルを検索し、例外が発生した場合に404エラーを返している。
 +
 +tryで検索結果が存在しないことを検出してHttp404オブジェクトを引数として例外を送出すれば、404エラーを返すことができる。
 +
 +データを検索して存在しな場合に404エラーを送出するのはよくある処理なので、ショートカットがある。
 +
 +
 +report/views.py
 +  from django.shortcuts import get_object_or_404
 +  
 +  def detail(request, ReportContents_id):
 +      Rep = get_object_or_404(ReportContents, pk=ReportContents_id)
 +      return render(request, 'report/detail.html', {'Rep':Rep})
 +
 +ショートカット関数をインポートして利用する。get_object_or_404関数は、第一引数にモデルを与え、その後に抽出の条件を任意の数与えると、対象が見つかれば対象をそのまま返し、見つからなければその場で例外として404オブジェクトを送出する。モデルのobject.getメソッドを使うショートカットの他に、listメソッドを呼び出すget_list_or_404などもある。
 +
 +
 +
 +
 +
 +
 +
 +
 +
  
  
メモ/django2.1559286664.txt.bz2 · 最終更新: 2019/05/31 16:11 by Wiki Editor

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki