Django-generic-views

提供:Dev Guides
移動先:案内検索

Django-汎用ビュー

場合によっては、前に見たようにビューを書くのは本当に重いです。 静的ページまたはリストページが必要だと想像してください。 Djangoは、汎用ビューと呼ばれるこれらの単純なビューを設定する簡単な方法を提供します。

クラシックビューとは異なり、ジェネリックビューは関数ではなくクラスです。 Djangoはdjango.views.genericでジェネリックビューのクラスのセットを提供し、すべてのジェネリックビューはそれらのクラスの1つまたはそれらの1つから継承するクラスです。

10個以上あります。ジェネリッククラス-

>>> import django.views.generic
>>> dir(django.views.generic)

['ArchiveIndexView', 'CreateView', 'DateDetailView', 'DayArchiveView',
   'DeleteView', 'DetailView', 'FormView', 'GenericViewError', 'ListView',
   'MonthArchiveView', 'RedirectView', 'TemplateView', 'TodayArchiveView',
   'UpdateView', 'View', 'WeekArchiveView', 'YearArchiveView', '__builtins__',
   '__doc__', '__file__', '__name__', '__package__', '__path__', 'base', 'dates',
   'detail', 'edit', 'list']

これは、汎用ビューに使用できます。 いくつかの例を見て、どのように機能するかを見てみましょう。

静的ページ

「staticl」テンプレートから静的ページを公開してみましょう。

私たちのstaticl-

<html>
   <body>
      This is a static page!!!
   </body>
</html>

以前に学んだ方法でこれを行った場合、 myapp/views.py を次のように変更する必要があります-

from django.shortcuts import render

def static(request):
   return render(request, 'staticl', {})

および myapp/urls.py は次のようになります-

from django.conf.urls import patterns, url

urlpatterns = patterns("myapp.views", url(r'^static/', 'static', name = 'static'),)

最善の方法は、汎用ビューを使用することです。 そのため、myapp/views.pyは次のようになります-

from django.views.generic import TemplateView

class StaticView(TemplateView):
   template_name = "staticl"

そして、私たちのmyapp/urls.py-

from myapp.views import StaticView
from django.conf.urls import patterns

urlpatterns = patterns("myapp.views", (r'^static/$', StaticView.as_view()),)

/myapp/staticにアクセスすると、次のようになります-

静的ページ

同じ結果のために、次のこともできます-

  • views.pyに変更はありません
  • url.pyファイルを次のように変更します-
from django.views.generic import TemplateView
from django.conf.urls import patterns, url

urlpatterns = patterns("myapp.views",
   url(r'^static/',TemplateView.as_view(template_name = 'staticl')),)

ご覧のとおり、2番目の方法でurl.pyファイルを変更するだけです。

DBからのデータのリストと表示

Dreamrealモデルのすべてのエントリをリストします。 これは、ListView汎用ビュークラスを使用して簡単に行えます。 url.pyファイルを編集し、次のように更新します-

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

urlpatterns = patterns(
   "myapp.views", url(r'^dreamreals/', ListView.as_view(model = Dreamreal,
      template_name = "dreamreal_listl")),
)

この時点で重要なのは、汎用ビューからテンプレートに渡される変数がobject_listであることです。 自分で名前を付けたい場合は、as_viewメソッドにcontext_object_name引数を追加する必要があります。 その後、url.pyは次のようになります-

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

urlpatterns = patterns("myapp.views",
   url(r'^dreamreals/', ListView.as_view(
      template_name = "dreamreal_listl")),
      model = Dreamreal, context_object_name = ”dreamreals_objects” ,)

関連するテンプレートは、その後になります-

{% extends "main_templatel" %}
{% block content %}
Dreamreals:<p>
{% for dr in object_list %}
{{dr.name}}</p>
{% endfor %}
{% endblock %}

/myapp/dreamreals/にアクセスすると、次のページが生成されます-

DBからのデータのリストと表示