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']
これは、一般的なビューに使用できます。それがどのように機能するかを見るためにいくつかの例を見てみましょう。
静的ページ
「static.html」テンプレートから静的ページを公開しましょう。
static.html −
<html>
<body>
This is a static page!!!
</body>
</html>
以前に学んだ方法でそれを行った場合、変更する必要があります myapp/views.py −になる
from django.shortcuts import render
def static(request):
return render(request, 'static.html', {})
そして 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 = "static.html"
そして、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 = 'static.html')),)
ご覧のとおり、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_list.html")),
)
この時点で注意すべき重要な点は、汎用ビューからテンプレートに渡される変数は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_list.html")),
model = Dreamreal, context_object_name = ”dreamreals_objects” ,)
関連付けられたテンプレートは次のようになります-
{% extends "main_template.html" %}
{% block content %}
Dreamreals:<p>
{% for dr in object_list %}
{{dr.name}}</p>
{% endfor %}
{% endblock %}
/ myapp / dreamreals /にアクセスすると、次のページが表示されます-