質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

1回答

3521閲覧

TemplateViewとviewsの違い

退会済みユーザー

退会済みユーザー

総合スコア0

Django

DjangoはPythonで書かれた、オープンソースウェブアプリケーションのフレームワークです。複雑なデータベースを扱うウェブサイトを開発する際に必要な労力を減らす為にデザインされました。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2017/08/12 08:04

TemplateViewをurl指定に使うべきときとviewsをurl指定に使うべきときの違いがわかりません。
https://docs.djangoproject.com/ja/1.11/intro/tutorial04/ のチュートリアルを見ながらwebサイトを作っています。

urls.pyの書き方で

from django.conf.urls import url from django.views.generic import TemplateView from . import views urlpatterns = [ url(r'(?P<pk>\d+)/results$', views.results, name='poll_results'), url(r'^$',TemplateView.as_view(template_name='app/index.html'),name='app_index'), ]

と2種類の書き方が出てきました。

views.results

TemplateView.as_view(template_name='app/index.html'),name='app_index')

です。
views〜の方は今までも使ってきたのでどういうものかはわかるのですが、
TemplateView〜の方はviewsと何が違うのかわかりません。
http://qiita.com/ytyng/items/7cb3c3a5605974151678 をみて、
TemplateViewについて調べていたのですが、viewsとの違いがよくわからず。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

Djangoのviewには大まかに2種類あります。def index(request)...のように関数で定義する関数ビューと、
class Index(generic.ListView)...のように定義するクラスベース汎用ビューの2つです。

TemplateViewもクラスベース汎用ビューの仲間です。
基本的には、クラスベース汎用ビューは開発者が書くコードが減るように作られています。
以下はデータの一覧表示、作成、更新、削除を行うビューです。シンプルなモノであれば、関数ビューに比べるとコード量が格段に減ります。

python

1from django.shortcuts import redirect 2from django.urls import reverse_lazy 3from django.views import generic 4from .models import Post 5 6 7class Index(generic.ListView): 8 model = Post 9 10 11class Create(generic.CreateView): 12 model = Post 13 fields = '__all__' 14 success_url = reverse_lazy('app:index') 15 16 17class Update(generic.UpdateView): 18 model = Post 19 fields = '__all__' 20 success_url = reverse_lazy('app:index') 21 22 23class Delete(generic.DeleteView): 24 model = Post 25 success_url = reverse_lazy('app:index')

また、クラスとして書くので、クラスの恩恵をそのまま受けることができます。
自分で作ったビューを継承することで似たようなビューを色々作れたり、他の誰かが作ったビューを継承して必要な部分だけ上書きすることもできます。

関数ビューとクラスベース汎用ビューのどちらを利用するかは場合によりますが、とりあえずはクラスベース汎用ビューを利用しておけば大丈夫です。

投稿2017/08/12 11:12

toritoritorina

総合スコア972

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問