Menu
CoddyTech

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 context

Có 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.

challenge icon

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"
quiz iconTự kiểm tra

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