---
title: "Base views"
version: 1.10
locale: ja
source: https://docs.djangoproject.com/ja/1.10/ref/class-based-views/base/
canonical: https://djangodocs.dev/ja/1.10/ref/class-based-views/base/
---
# Base views

以下の3つのクラスは、Django のビューの作成に必要な多くの機能を提供します。これらは Django ビューの *親の* ビューと見なすことができ、それ自体で使うことも継承して使うこともできます。プロジェクトに必要な全ての機能を提供するわけではありませんが、その場合は Mixins と汎用クラスベースビューが使えます。

多くの Django のビルトインのクラスベースビューは、ほかのクラスベースビューや多種の mixin を継承しています。この継承チェーンは非常に重要なため、原型のクラスは **継承元 (MRO)** セクションにドキュメントがあります。MRO は メソッド解決順序 (Method Resolution Order) の略です。

## `View`

#### `class django.views.generic.base.View`

すべての元となるクラスベースビューです。他の全てのクラスベースビューは、この基本クラスを継承しています。厳密には汎用ビューではありませんので、`django.views` からインポートされることができます。

> **Changed in Django 1.10**
>
> `django.views` からインポートできるようになりました。

**メソッドのフローチャート**

1. [`dispatch()`](#django.views.generic.base.View.dispatch)
2. [`http_method_not_allowed()`](#django.views.generic.base.View.http_method_not_allowed)
3. [`options()`](#django.views.generic.base.View.options)

**Example views.py**:

```
from django.http import HttpResponse
from django.views import View

class MyView(View):

    def get(self, request, *args, **kwargs):
        return HttpResponse('Hello, World!')
```

**Example urls.py**:

```
from django.conf.urls import url

from myapp.views import MyView

urlpatterns = [
    url(r'^mine/$', MyView.as_view(), name='my-view'),
]
```

**属性**

#### `http_method_names`

このビューが受け入れる HTTP メソッドの名称のリストです。

デフォルト値:

```
['get', 'post', 'put', 'patch', 'delete', 'head', 'options', 'trace']
```

**メソッド**

#### `classmethod as_view(**initkwargs)`

リクエストを受け取ってレスポンスを返す、呼び出し可能なビューを返します:

```
response = MyView.as_view()(request)
```

> **New in Django 1.9**

返されたビューは、`view_class` と `view_initkwargs` 属性を持っています。

#### `dispatch(request, *args, **kwargs)`

ビューの `ビュー` 部分 -- `リクエスト` 引数を受け入れて、HTTP レスポンスを返すメソッドです。

デフォルトの処理は、HTTP メソッドを調べて、その HTTP メソッドと一致するメソッドに処理を委ねるよう試みます; 例えば、`GET` は `get()` に、`POST` は `post()` に委ねられます。

デフォルトでは、`HEAD` リクエストは `get()` に委ねられます。`HEAD` リクエストを `GET` とは違う方法で操作する必要がある場合は、`head()` メソッドをオーバーライドすることができます。例えば [Supporting other HTTP methods](/ja/1.10/topics/class-based-views/#supporting-other-http-methods) をご覧ください。

#### `http_method_not_allowed(request, *args, **kwargs)`

ビューが、サポートしていない HTTP メソッドとともに呼び出された場合、このメソッドが代わりに呼ばれます。

プレーンテキストで、有効なメソッドのリストともに、`HttpResponseNotAllowed` を返すデフォルトの処理です。

#### `options(request, *args, **kwargs)`

OPTIONS HTTP 動詞のためのリクエストへのレスポンスを操作します。ビューの有効な HTTP メソッド名のリストを含む `Allow` ヘッダーとともにレスポンスを返します。

## `TemplateView`

#### `class django.views.generic.base.TemplateView`

URL 内でキャプチャされたパラメータを含むコンテキストとともに、与えられたテンプレートをレンダリングします。

**継承元 (MRO)**

このメソッドは、以下のビューからメソッドと属性を継承しています:

- [`django.views.generic.base.TemplateResponseMixin`](/ja/1.10/ref/class-based-views/mixins-simple/#django.views.generic.base.TemplateResponseMixin)
- [`django.views.generic.base.ContextMixin`](/ja/1.10/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin)
- [`django.views.generic.base.View`](#django.views.generic.base.View)

**メソッドのフローチャート**

1. [`dispatch()`](#django.views.generic.base.View.dispatch)
2. [`http_method_not_allowed()`](#django.views.generic.base.View.http_method_not_allowed)
3. [`get_context_data()`](/ja/1.10/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin.get_context_data)

**Example views.py**:

```
from django.views.generic.base import TemplateView

from articles.models import Article

class HomePageView(TemplateView):

    template_name = "home.html"

    def get_context_data(self, **kwargs):
        context = super(HomePageView, self).get_context_data(**kwargs)
        context['latest_articles'] = Article.objects.all()[:5]
        return context
```

**Example urls.py**:

```
from django.conf.urls import url

from myapp.views import HomePageView

urlpatterns = [
    url(r'^$', HomePageView.as_view(), name='home'),
]
```

**コンテキスト**

- ([`ContextMixin`](/ja/1.10/ref/class-based-views/mixins-simple/#django.views.generic.base.ContextMixin) を通じて) ビューに対応した URL パターンからキャプチャされたキーワード引数とともに入力されます。

## `RedirectView`

#### `class django.views.generic.base.RedirectView`

与えられた URL にリダイレクトします。

与えられた URL は、辞書形式の文字列フォーマットを含むかもしれず、URL 内でキャプチャされたパラメータに対して追加されます。キーワード追加は (たとえ引数が渡されなくとも) *常に* 行われるため、Python がアウトプット上でパーセント文字に変換できるように、URL 内のすべての `"%"` 文字は `"%%"` と書かれなければなりません。

与えられた URL が `None` の場合、Djangoは `HttpResponseGone` (410) を返します。

**継承元 (MRO)**

このビューは、以下のビューからメソッドと属性を継承します:

- [`django.views.generic.base.View`](#django.views.generic.base.View)

**メソッドのフローチャート**

1. [`dispatch()`](#django.views.generic.base.View.dispatch)
2. [`http_method_not_allowed()`](#django.views.generic.base.View.http_method_not_allowed)
3. [`get_redirect_url()`](#django.views.generic.base.RedirectView.get_redirect_url)

**Example views.py**:

```
from django.shortcuts import get_object_or_404
from django.views.generic.base import RedirectView

from articles.models import Article

class ArticleCounterRedirectView(RedirectView):

    permanent = False
    query_string = True
    pattern_name = 'article-detail'

    def get_redirect_url(self, *args, **kwargs):
        article = get_object_or_404(Article, pk=kwargs['pk'])
        article.update_counter()
        return super(ArticleCounterRedirectView, self).get_redirect_url(*args, **kwargs)
```

**Example urls.py**:

```
from django.conf.urls import url
from django.views.generic.base import RedirectView

from article.views import ArticleCounterRedirectView, ArticleDetail

urlpatterns = [
    url(r'^counter/(?P<pk>[0-9]+)/$', ArticleCounterRedirectView.as_view(), name='article-counter'),
    url(r'^details/(?P<pk>[0-9]+)/$', ArticleDetail.as_view(), name='article-detail'),
    url(r'^go-to-django/$', RedirectView.as_view(url='https://djangoproject.com'), name='go-to-django'),
]
```

**属性**

#### `url`

リダイレクト先の URL です。もしくは、410 (Gone) HTTP エラーを投げる `None` です。

#### `pattern_name`

リダイレクト先の URL パターンの名前です。このビューのために渡されてきたものと同じ args と kwargs を使ってリバースされます。

#### `permanent`

リダイレクトがパーマネントかどうかを指定します。ここでの違いは、返される HTTP ステータスコードだけです。`True` の場合、リダイレクトはステータスコード 301 を使います。`False` の場合は、ステータスコード 302 を使います。デフォルトでは、`permanent` は `False` です。

> **Changed in Django 1.9**
>
> `permanent` 属性のデフォルト値が `True` から `False` に変更されました。

#### `query_string`

GET クエリ文字列を新しい場所に渡すかどうかを指定します。`True` の場合、クエリ文字列は URL に追加されます。`False` の場合、クエリ文字列は破棄されます。 デフォルトでは、`query_string` は `False` です。

**メソッド**

#### `get_redirect_url(*args, **kwargs)`

リダイレクトのために、対象の URL を組み立てます。

デフォルトの処理は、[`url`](#django.views.generic.base.RedirectView.url) を最初の文字列として使い、URLでキャプチャされた名前付きグループを使用したその文字列内の名前付き `%` パラメータの展開を実行します。

[`url`](#django.views.generic.base.RedirectView.url) がセットされていない場合、`get_redirect_url()` が URLでキャプチャされたものを使って [`pattern_name`](#django.views.generic.base.RedirectView.pattern_name) をリバースしようとします (名前あり・名前なしグループの両方が使われます)。

[`query_string`](#django.views.generic.base.RedirectView.query_string) によってリクエストされた場合、生成された URL にクエリ文字列を追加します。サブクラスは、メソッドがリダイレクト準備ができた URL 文字列を返す限り、これらが望むとおりの処理をします。
