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ướcNế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.
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.
- Trong
jobs/views.py, thêmJobListView, mộtListViewcủaJob. Đặt tên danh sách làjobs, sắp xếp để ngàypostedmới nhất đứng đầu và giữ nguyên mẫu mặc định. - Trong
jobs/urls.py, thêm tuyến đường"jobs/"có tênlist.
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