revision-up-to: | 17812 (1.4) |
---|
django.shotcuts
パッケージでは、MVC の複数のレベルを「橋渡し」するため
のヘルパ関数やクラスを定義しています。言い換えると、これらの関数やクラスは、
利便性を実現するために、きちんと制御された形でのカップリングを行えるように
しているのです。
render
¶render
(request, template[, dictionary][, context_instance][, content_type][, status][, current_app])¶リリースノートを参照してください
与えられたテンプレートとコンテキスト辞書を結合し
HttpResponse
オブジェクトをレンダされたテキストと
ともに返します。
render()
は render_to_response()
の context_instance
引数に、使用させる RequestContext
を渡した場
合と同じ動作をします。
request
template
dictionary
context_instance
RequestContext
インスタンス (request
と
dictionary
の値が入っています) によってレンダリングされます。content_type
DEFAULT_CONTENT_TYPE
を使います。status
200
。current_app
次の例は myapp/index.html
テンプレートをレンダし、 MIMETYPE に
application/xhtml+xml を使います:
from django.shortcuts import render
def my_view(request):
# View code here...
return render(request, 'myapp/index.html', {"foo": "bar"},
content_type="application/xhtml+xml")
この例も同等の処理をします:
from django.http import HttpResponse
from django.template import RequestContext, loader
def my_view(request):
# View code here...
t = loader.get_template('myapp/template.html')
c = RequestContext(request, {'foo': 'bar'})
return HttpResponse(t.render(c),
content_type="application/xhtml+xml")
render_to_response
¶render_to_response
(template_name[, dictionary][, context_instance][, mimetype])¶引数に指定したテンプレートとコンテキストを使ってテンプレートをレンダし、
レンダ結果のテキストの入った HttpResponse
オブジェ
クトを返します。
template
dictionary
context_instance
テンプレートをレンダするときに使うコンテキストインスタンスです。デフォ
ルトでは、テンプレートは (dictionary
の値が入った)
Context
インスタンスを使ってレンダされます。
コンテキストプロセッサ を使
いたい場合には、例えば以下のように
RequestContext
を使ってテンプレートをレンダし
てください:
return render_to_response('my_template.html',
my_data_dictionary,
context_instance=RequestContext(request))
mimetype
レンダ結果のドキュメントに対して指定する 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")
redirect
¶redirect
(to, [permanent=False, ]*args, **kwargs)¶引数として渡された適切な URL への
HttpResponseRedirect
を返します。
引数には以下を取れます:
デフォルトでは一時的リダイレクトを発行します。 permanent=True
を渡すと永続的なリダイレクトを発行します。
redirect()
関数は複数の方法で使えます。
オブジェクトを渡す; 渡したオブジェクトの
get_absolute_url()
が呼ばれます:
def my_view(request):
...
object = MyModel.objects.get(...)
return redirect(object)
ビューの名前を渡す。ポジション引数やキーワード引数を渡すこともできます。
URL は reverse()
method:: によって
リバース参照されます:
def my_view(request):
...
return redirect('some-view-name', foo='bar')
リダイレクト先の URL をハードコードで渡す:
def my_view(request):
...
return redirect('/some/url/')
完全な URL でも動作します:
def my_view(request):
...
return redirect('http://example.com/')
デフォルトでは redirect()
は一時的リダイレクトを返します。上に書いた
形式のいずれも permanent
引数を取ることができます。 True に セットされ
ると永続的なリダイレクトを返します。
- def my_view(request):
- ... object = MyModel.objects.get(...) return redirect(object, permanent=True)
get_object_or_404
¶get_object_or_404
(klass, *args, **kwargs)¶指定したモデルマネジャに対して 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
例外が送出されます。
get_list_or_404
¶get_list_or_404
(klass, *args, **kwargs)¶指定したモデルマネジャに対して
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
Oct 26, 2017