見出し画像

DjangoのViewについて

Djangoには「Viewテンプレート」というものがあります。ここではDjangoのビュー操作について書いています。

Djangoにはviewをテンプレートから呼び出して書くことができます。開発の際に、一からコードを書かなくてもよい仕組みになります。

ウェブアプリケーションを書くのは、特定のパターンを何度も繰り返すことになるため、単調になりがちです。Django はモデルとテンプレート層で単調さを取り除くことを試みてきましたが、ウェブ開発者はビューレベルでもこの種の退屈な繰り返しを経験してきました。
Django の ジェネリックビュー は、この苦痛を軽減するために開発されました。ビューの開発には共通のイディオムとパタンが存在するため、それらを抽象化することで、共通のビューデータを少ないコードで素早く記述することができます。            

Djangoドキュメントより抜粋

sample/views.py

テンプレートビューを使ったコード



from .models import Todo
from django import Templateview

class IndexView(TemplateView):
    template_name = 'index.html'
    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs) #オーバーライド
        context['message'] = 'こんにちは'
        return context

TemplateViewはトップページによく使われます。
template_nameを指定し、データを表示させるためにget_context_data関数を使用します。
get_context_dataはオリジナル変数を作るときに使います。
context_dataをオーバライドさせて、コンテキストに値を渡します。
リターンで返される文字列は"こんにちは"になります。


Djangoにおいてこれらのクラスは、ジェネリックビューや汎用ビュー(Generic views)などと呼ばれています。その基本となるクラスの一つがTemplateViewです。

ListView
ただリストを表示をしたいだけならListViewがいいかもしれません。

from .models import Todo
from django import generic.ListView #追加

class IndexView(ListView):
    template_name = 'index.html'
    model = Todo
    context_object_name = "todo_list"
    

ここではTodoリストを表示しています。
モデルの指定とcontext nameを指定していますが、ルールに従うことによりこれは省くことができます。

from .models import Todo
from django.views.generic import ListView

class IndexView(ListView):
    template_name = 'index.html'

これで大丈夫です。

ルールとして
<アプリ名>/<モデル名>_list.html
コンテキスト変数:<モデル名>_list

app/list.html

 {% for todo in todo_list %} 
<li>{{ todo }}</li>
{% endfor %} 

これでtodoリストが表示されます。


まとめ

テンプレートViewを使うと簡単にデータ表示させることができる。
リスト表示させるだけなら、汎用テンプレートを使うと数行でコードで書ける。


宣伝

プログラミング開発を承ってます!したいことを形にいたします。ぜひのぞいてみてください。

https://fdg-consulting.com/


ログイン認証も記事おすすめ!


ご覧いただきありがとうございました。 サポートしていただいたお金は開発費にかけさせていただきます。