読者です 読者をやめる 読者になる 読者になる

【django】クラス汎用ビューについて

タイトル通りクラス汎用ビューの覚書きです。

 

Djangoの公式チュートリアルでは関数ベースのビューを使っているため非常につかみ辛かったのですが、何とか消化できたので記載。

 

クラス汎用ビューとは

雑に言うとあらかじめDjangoが用意してくれている、汎用的なビューのことです。

基本的にFormviewやListviewなどのクラス汎用ビューを継承して、テンプレート用のHTMLに指定された変数名を記載しておくだけで画面が作れてしまうという非常に便利なものです。

 

例:ListView

mysite/sample/urls.py

from django.conf.urls import url
from django.views.generic import ListView

urlpatterns = [
url(r'^sample/',SampleListView.as_view(),name='sample'),
]

 

mysite/sample/views.py

template _nameを指定しないと、sample/model_list.html を参照するっぽいです。

from django.http import HttpResponse
from django.views.generic import ListView
from sample.models import Sample
@method_decorator(login_required, name = 'dispatch') class Sample
ListView(ListView): model = Sample template_name = 'sample_list.html'

mysite/sample/models.py

from django.db import models

class Sample(models.Model):
    name = models.CharField(max_length=30)

mysite/template/sample_list.html

上のviews.pyでget_context_dataをオーバーライドして取得データをprint してみると何取得してるかわかります。

<table>
<thead><tr>
<th>id</th>
<th>name</th>
</tr></thead>
<tbody>
{% for sample in object_list %}
<tr>
<td> {{sample.id}}</td>
<td> {{sample.name}}</td>
{% empty %}
<a> empty </a>
{% endfor %}
</table>




(importしてるものちょくちょく抜けてたりしますが、)こんな感じに適当にコーディングしてあげるとDjangoが勝手に解釈して作ってくれます。

もちろんクラス汎用ビューはget_context_data()等を持っているのでこれらをオーバーライドして処理を加えたりすることもできます。

CreateViewやFormViewなど色々な汎用ビューがあるので詳しくは公式Docmentを読んでみてください

Django公式

https://docs.djangoproject.com/ja/1.10/topics/class-based-views/

 

(何か間違いなどありましたらご指摘お願いします。)