revision-up-to: | 8961 (1.0) |
---|
django.shotcuts パッケージでは、MVC の複数のレベルを「橋渡し」するため のヘルパ関数やクラスを定義しています。言い換えると、これらの関数やクラスは、 利便性を実現するために、きちんと制御された形でのカップリングを行えるように しているのです。
django.shortcuts.render_to_response は、引数指定したテンプレートとコン テキストを使ってテンプレートをレンダし、レンダ結果のテキストの入った HttpResponse オブジェクトを返します。
テンプレートをレンダするときに使うコンテキストインスタンスです。デフォ ルトでは、テンプレートは (dictionary の値が入った) Context イン スタンスを使ってレンダされます。 コンテキストプロセッサ を使 いたい場合には、例えば以下のように RequestContext を使ってテンプレー トをレンダしてください:
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
mimetype
Django 1.0 で新たに登場しました.レンダ結果のドキュメントに対して指定する MIME タイプです。デフォルトの 値として、 DEFAULT_CONTENT_TYPE を使います。
以下の例では、 myapp/index.html を MIME タイプ application/xhtml+xml でレンダしてます:::
from django.shortcuts import render_to_response
def my_view(request):
# View code here...
return render_to_response('myapp/index.html', {"foo": "bar"},
mimetype="application/xhtml+xml")
上の例は、以下の例と等価です:
from django.http import HttpResponse
from django.template import Context, loader
def my_view(request):
# View code here...
t = loader.get_template('myapp/template.html')
c = Context({'foo': 'bar'})
r = HttpResponse(t.render(c),
mimetype="application/xhtml+xml")
django.shortcuts.get_object_or_404 は、指定したモデルマネジャに対して get() を呼出します。ただし、マネジャがモデ ルの DoesNotExist を送出した場合には、 django.http.Http404 を送出し ます。
以下の例では、 MyModel から主キーが 1 のオブジェクトを取得しています:
from django.shortcuts import get_object_or_404
def my_view(request):
my_object = get_object_or_404(MyModel, pk=1)
この例は、以下の例と等価です:
from django.http import Http404
def my_view(request):
try:
my_object = MyModel.objects.get(pk=1)
except MyModel.DoesNotExist:
raise Http404
注意: get() と同様、オブジェクトが複数見つかった場合には、 MultipleObjectsReturned 例外が送出されます。
django.shortcuts.get_list_or_404 は指定したモデルマネジャに対して filter() を呼び出した結果を返します。戻り 値のリストが空なら、 django.http.Http404 を送出します。
以下の例では、 MyModel から published=True のオブジェクトを全て取得して います:
from django.shortcuts import get_list_or_404
def my_view(request):
my_objects = get_list_or_404(MyModel, published=True)
この例は、以下の例と等価です:
from django.http import Http404
def my_view(request):
my_objects = MyModel.objects.filter(published=True)
if not my_objects:
raise Http404
Aug 31, 2012