Menu
CoddyTech

ListView

CoddyのDjangoジャーニー「クラスベースビュー」セクションの一部。レッスン 4/18。

ボードには、すべての求人を一覧表示するページが必要です。テーブルの行の一覧表示はよくある処理なので、Djangoにはそのためのビューが用意されています。ListViewです。モデルを渡すと、行をクエリし、それらを使ってテンプレートをレンダリングします。アプリrecipesにある、レシピサイトの一覧ビューの例です。

from django.views.generic import ListView


class RecipeListView(ListView):
    model = Recipe
    context_object_name = "recipes"   # {% for recipe in recipes %}
    ordering = ["minutes"]             # 所要時間が短い順

template_nameを指定しない場合、recipes/recipe_list.htmlをレンダリングします。これは、アプリのラベル、小文字にしたモデル名、そして_list.htmlを組み合わせたものです。行はobject_listとrecipe_list、またはcontext_object_nameで指定した名前で渡されます。

orderingにはorder_by()と同じものを指定できるので、["-minutes"]とすると、最も時間のかかるレシピが先頭になります。指定しない場合、行はデータベースの順序で取得されます。

challenge icon

チャレンジ

簡単

求人ページを追加します。テンプレートの jobs/job_list.html は用意されており、jobs をループ処理します。

  • jobs/views.py に、Job の ListView である JobListView を作成し、リスト名を jobs にして、posted の日付が新しいものを先に表示します。デフォルトのテンプレートを使います。
  • jobs/urls.py に、名前が list の "jobs/" ルートを追加します。

Run を押して、/jobs/ を開きます。

自分で試してみよう

from django.views.generic import TemplateView

from .models import Job


class HomeView(TemplateView):
    template_name = "jobs/home.html"

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        context["count"] = Job.objects.count()
        context["latest"] = Job.objects.order_by("-posted").first()
        return context


class AboutView(TemplateView):
    template_name = "jobs/about.html"

クラスベースビューのすべてのレッスン

自分で練習してみよう: Djangoプレイグラウンド