Django 1.2 のすべての 関数ベース汎用ビュー には類似 する クラスベース汎用ビュー が、 Django 1.3 に あります。関数ベース汎用ビューで提供されている機能セットは、クラスベース版で 再現可能です。
現行使われている関数ベース汎用ビューは、そのクラスベース版に置き換えるべきです:
旧 : 関数ベース汎用ビュー | 新 : クラスベース汎用ビュー |
---|---|
django.views.generic.simple.direct_to_template |
django.views.generic.base.TemplateView |
django.views.generic.simple.redirect_to |
django.views.generic.base.RedirectView |
django.views.generic.list_detail.object_list |
django.views.generic.list.ListView |
django.views.generic.list_detail.object_detail |
django.views.generic.detail.DetailView |
django.views.generic.create_update.create_object |
django.views.generic.edit.CreateView |
django.views.generic.create_update.update_object |
django.views.generic.edit.UpdateView |
django.views.generic.create_update.delete_object |
django.views.generic.edit.DeleteView |
django.views.generic.date_based.archive_index |
django.views.generic.dates.ArchiveIndexView |
django.views.generic.date_based.archive_year |
django.views.generic.dates.YearArchiveView |
django.views.generic.date_based.archive_month |
django.views.generic.dates.MonthArchiveView |
django.views.generic.date_based.archive_week |
django.views.generic.dates.WeekArchiveView |
django.views.generic.date_based.archive_day |
django.views.generic.dates.DayArchiveView |
django.views.generic.date_based.archive_today |
django.views.generic.dates.TodayArchiveView |
django.views.generic.date_based.object_detail |
django.views.generic.dates.DateDetailView |
これを行うには、汎用ビュー関数への参照を、クラスベースビューを as_view()
で
インスタンス化したものに置き換えます。例えば、旧スタイルの
direct_to_template
は:
('^about/$', direct_to_template, {'template': 'about.html'})
TemplateView
のインスタンスで置き換えられます:
('^about/$', TemplateView.as_view(template_name='about.html'))
direct_to_template
ビューの template
引数¶direct_to_template
ビューの template
引数は template_name
に改名され
ました。他のビューとの一貫性を保つためです。
object_id
引数¶object_detail
ビューの object_id
引数は、
DetailView
の pk
に改名されました。
template_object_name
¶template_object_name
は context_object_name
に改名されました。コンテ
キストデータが、テンプレートのレンダリング以外の目的 (例えば JSON 出力の追加)
に使えるからです。
_list
サフィックス¶関数ベースの ListView
でコンテキスト変数名は、 template_object_name
の値に _list
サフィックスが追加されたものでした。クラスベースの ListView
では、 context_object_name
の値がそのまま使用されています。デフォルトの
コンテキストオブジェクト名を生成するときにのみ、 '_list'
サフィックスが適応
されます。
object_list
ビューのコンテキストデータ¶MultipleObjectMixin
に提供されるコンテキスト
は、 object_list
のそれとは全く異なります。ほとんどのページネーション関連の
変数が、単一の page_obj
オブジェクトに置き換えられています。以下の変数はもう
提供されていません:
first_on_page
has_next
has_previous
hits
last_on_page
next
page_range
page
pages
previous
results_per_page
extra_context
¶関数ベース汎用ビューは extra_context
引数を提供していました。これはレンダリ
ング時に、コンテキストへ追加のオブジェクトを渡すために使われていました。
クラスベースビューは extra_context
引数を提供しません。代わりにビューを継承
して、 get_context_data()
をオーバーライドします。例を挙げます:
class MyListView(ListView):
def get_context_data(self, **kwargs):
context = super(MyListView, self).get_context_data(**kwargs)
context.update({
'foo': 42,
'bar': 37
})
return context
post_save_redirect
¶生成、更新ビューの post_save_redirect
は、
ModelFormMixin
で success_url
に改名
されました。
mimetype
¶いくつかの関数ベース汎用ビューは mimetype
引数を提供していました。これは
レスポンスの MIME タイプを管理するために使われていました。
クラスベースビューは mimetype
引数を提供しません。代わりにビューを継承して
TemplateResponseMixin.render_to_response()
をオーバーライドします。
そして TemplateResponse コンストラクタの引数に渡します。例を挙げます:
class MyListView(ListView):
def render_to_response(self, context, **kwargs):
return super(MyListView, self).render_to_response(context,
content_type='application/json', **kwargs)
context_processors
¶いくつかの関数ベース汎用ビューは context_processors
引数を提供していました。
テンプレートのレンダリング時に使う、コンテキストプロセッサを指定できます。
クラスベースビューは context_processors
引数を提供しません。代わりにビューを
継承して TemplateResponseMixin.render_to_response()
をオーバーライド
します。そして、使いたいプロセッサをインスタンス化した、コンテキストインスタンス
を渡します。例を挙げます:
class MyListView(ListView):
def render_to_response(self, context, **kwargs):
return super(MyListView, self).render_to_response(
RequestContext(self.request,
context,
processors=[custom_processor]),
**kwargs)
Oct 26, 2017