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"]とすると、最も時間のかかるレシピが先頭になります。指定しない場合、行はデータベースの順序で取得されます。
チャレンジ
簡単求人ページを追加します。テンプレートの 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プレイグラウンド