Menu
CoddyTech

ListView

Thuộc phần View dựa trên lớp trong hành trình Django của Coddy. Bài học 4 trên 18.

Bảng điều khiển cần một trang liệt kê mọi công việc. Việc liệt kê các hàng trong bảng phổ biến đến mức Django đã viết sẵn khung nhìn này: ListView. Hãy cung cấp cho nó một mô hình, rồi nó sẽ truy vấn các hàng và kết xuất một mẫu có chứa chúng. Danh sách công thức trong ứng dụng recipes:

from django.views.generic import ListView


class RecipeListView(ListView):
    model = Recipe
    context_object_name = "recipes"   # {% for recipe in recipes %}
    ordering = ["minutes"]             # Nhanh nhất trước

Nếu không có template_name, nó sẽ kết xuất recipes/recipe_list.html: nhãn ứng dụng, tên mô hình viết thường, rồi đến _list.html. Mẫu luôn nhận các hàng dưới tên object_list. Mẫu cũng nhận chúng dưới tên recipe_list, hoặc, nếu bạn đặt context_object_name, dưới tên đó.

ordering nhận các giá trị giống như order_by(), vì vậy ["-minutes"] sẽ đưa công thức cần nhiều thời gian nhất lên đầu. Nếu không có nó, các hàng sẽ xuất hiện theo thứ tự trong cơ sở dữ liệu.

challenge icon

Thử thách

Dễ

Thêm trang công việc, dùng mẫu có sẵn jobs/job_list.html, trong đó có vòng lặp qua jobs.

  1. Trong jobs/views.py, thêm JobListView, một ListView của Job. Đặt tên danh sách là jobs, sắp xếp để ngày posted mới nhất đứng đầu và giữ nguyên mẫu mặc định.
  2. Trong jobs/urls.py, thêm tuyến đường "jobs/" có tên list.

Mở /jobs/: Python Developer đứng đầu và Technical Writer đứng cuối.

Tự làm thử

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"

Tất cả bài học trong View dựa trên lớp

Tự luyện tập: Playground Django