ショートカット関数

revision-up-to:11321 (1.1) unfinished

django.shotcuts パッケージでは、MVC の複数のレベルを「橋渡し」するため のヘルパ関数やクラスを定義しています。言い換えると、これらの関数やクラスは、 利便性を実現するために、きちんと制御された形でのカップリングを行えるように しているのです。

render_to_response

render_to_response(template[, 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
Django 1.0 で新たに登場しました: Please, see the release notes

レンダ結果のドキュメントに対して指定する 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)
Django 1.1 で新たに登場しました: Please, see the release notes

Returns an HttpResponseRedirect to the apropriate URL for the arguments passed.

The arguments could be:

  • A model: the model's get_absolute_url() function will be called.
  • A view name, possibly with arguments: urlresolvers.reverse() will be used to reverse-resolve the name.
  • A URL, which will be used as-is for the redirect location.

By default issues a temporary redirect; pass permanent=True to issue a permanent redirect

Examples

You can use the redirect() function in a number of ways.

  1. By passing some object; that object's get_absolute_url() method will be called to figure out the redirect URL:

    def my_view(request):
        ...
        object = MyModel.objects.get(...)
        return redirect(object)
    
  2. By passing the name of a view and optionally some positional or keyword arguments; the URL will be reverse resolved using the reverse() method:

    def my_view(request):
        ...
        return redirect('some-view-name', foo='bar')
    
  3. By passing a hardcoded URL to redirect to:

    def my_view(request):
        ...
        return redirect('/some/url/')
    

    This also works with full URLs:

    def my_view(request):
        ...
        return redirect('http://example.com/')
    

By default, redirect() returns a temporary redirect. All of the above forms accept a permanent argument; if set to True a permanent redirect will be returned:

def my_view(request):
    ...
    object = MyModel.objects.get(...)
    return redirect(object, permanent=True)

get_object_or_404

get_object_or_404(object, *args, **kwargs)
指定したモデルマネジャに対して get() を 呼出します。ただし、マネジャがモデルの DoesNotExist を送出した場合に は、 django.http.Http404 を送出します。

必須の引数

klass
オブジェクトの取得対象である、 Model, Manager または QuerySet インスタンスです。
**kwargs
検索パラメタです。 get()filter() と同じ引数を使えます。

使用例

以下の例では、 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 を送出します。

必須の引数

klass
オブジェクトの取得対象である、 Model, Manager または QuerySet インスタンスです。
**kwargs
検索パラメタです。 get()filter() と同じ引数を使えます。

使用例

以下の例では、 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