LoginSignup
2

More than 5 years have passed since last update.

[Django] Generic display viewsについて

Last updated at Posted at 2015-12-23

 はじめに

最近、Django1.9を使っています。Django1.3からあるらしいのですが、再度view関係のクラスについてまとめておこうと思います。

Generic display views

今回はGeneric display viewについてです。ドキュメント読めばだいたい分かるんですけどね。

最小限で使ってみる

サンプルって色々書いてあるので、最小限だとどうなるのか書いてみました。Djangoのチュートリアルの12を終わらせた状態ではじめます。

view.py

まずはview.pyに最小限ListViewとDetailViewを継承したクラスを作ります。指定するのはmodelとtemplateのみです。

polls/veiw.py
from django.views.generic.detail import DetailView
from django.views.generic.list import ListView

from .models import Question


class IndexView(ListView):

    model = Question
    template_name = 'polls/index.html'

class DetailView(DetailView):

    model = Question
    template_name = 'polls/detail.html'

url.py

viewにクラスを作ったので、url.pyを作ります。

polls/url.py
from django.conf.urls import url

from . import views

app_name = 'polls'
urlpatterns = [
    url(r'^$', views.IndexView.as_view(), name='index'),
    url(r'^(?P<pk>[0-9]+)/$', views.DetailView.as_view(), name='detail'),
]

template

次はテンプレートを用意しましょう。

ListViewはmodelを指定するだけで、テンプレートにobject_listに指定したmodelのリストが渡されます。DetailViewの方はobjectに指定されたpkを持つデータが渡されています。

templates/polls/index.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Index</title>
</head>
<body>
Index
{% for object in object_list %}
    <h3>{{ object.question_text }}/ {{ object.pub_date }}</h3>
{% endfor %}
</body>
</html>
templates/polls/detail.html
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Detail</title>
</head>
<body>
Detail
<h1>{{ object.question_text }}</h1>
<h1>{{ object.pub_date }}</h1>
</body>
</html>

画面で見てみよう

ListViewから見てみましょう。

http://127.0.0.1:8000/polls/

index1.png

1件しか表示されていないと有り難みが薄いのでDjangoAdminで1件追加します。

admin.png

再度表示します。2件、表示されました。

index2.png

次はDetailViewです。こちらは指定されたpkのデータが表示されています。pkの番号は登録順などで違いますので、DjangoAdminなどで確認してください。

http://127.0.0.1:8000/polls/1/

detail.png

まとめ

一覧と詳細だけ表示したい場合はデータ型などにこだわらなければListViewとDetailViewで簡単に表示することができますね。

最後に

これは2015 tech-yuruyuru アドベントカレンダーの9日目の記事です。

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2