Thêm vào ngữ cảnh
Thuộc phần View dựa trên lớp trong hành trình Django của Coddy. Bài học 3 trên 18.
Trang chủ cũng có thể dùng TemplateView, nhưng mẫu cần dữ liệu. Các biến mà mẫu nhận được tạo thành ngữ cảnh, và một khung nhìn tổng quát tạo chúng trong một phương thức, get_context_data(). Hãy ghi đè phương thức này để thêm dữ liệu của bạn. Một trang web về công thức nấu ăn đếm số công thức nấu nhanh:
class RecipeHomeView(TemplateView):
template_name = "recipes/home.html"
def get_context_data(self, **kwargs):
context = super().get_context_data(**kwargs)
context["quick"] = Recipe.objects.filter(minutes__lte=30).count()
return contextCó ba bước, luôn giống nhau: super().get_context_data(**kwargs) lấy từ điển mà Django đã tạo, bạn thêm các khóa của mình, rồi return từ điển đó. Mẫu nhận bất cứ thứ gì phương thức này trả về.
Truy vấn nằm bên trong phương thức, nên nó chạy mỗi khi có yêu cầu. Nếu đặt truy vấn làm thuộc tính lớp, nó sẽ chạy một lần khi máy chủ khởi động và con số sẽ không bao giờ thay đổi.
Thử thách
DễGiờ đây, mẫu trang chủ cũng hiển thị công việc mới nhất. Trong jobs/views.py, viết lại HomeView thành một TemplateView cho jobs/home.html, không có get(). Ngữ cảnh của nó bổ sung count, số lượng công việc, và latest, công việc có ngày posted mới nhất.
Nhấn Chạy: trang chủ hiển thị 12 jobs open và Newest: Python Developer at Brightline.
Tự làm thử
from django.shortcuts import render
from django.views import View
from django.views.generic import TemplateView
from .models import Job
class HomeView(View):
def get(self, request):
count = Job.objects.count()
return render(request, "jobs/home.html", {"count": count})
class AboutView(TemplateView):
template_name = "jobs/about.html"
Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.
Tất cả bài học trong View dựa trên lớp
Tự luyện tập: Playground Django