Menu
CoddyTech

向上下文中添加内容

本课属于 Coddy Django 学习旅程的“基于类的视图”单元。第 3 课,共 18 课。

首页也可以使用 TemplateView,但它的模板需要数据。模板接收的变量就是它的上下文,通用视图会在 get_context_data() 方法中构建这些变量。重写这个方法,就能添加你自己的内容。食谱网站会统计快速食谱的数量:

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

三个步骤,每次都一样:super().get_context_data(**kwargs) 会获取 Django 构建的字典,你添加自己的键,然后 return 这个字典。模板会获取这个方法返回的内容。

查询写在方法内部,所以每次收到请求时都会运行。如果把它写成类属性,它就会在服务器启动时运行一次,数字也就不会再变化。

challenge icon

挑战

简单

首页模板现在也会显示最新发布的职位。在 jobs/views.py 中,将 HomeView 重写为用于 jobs/home.html 的 TemplateView,不要编写 get()。它的上下文会添加 count,即职位数量,以及 latest,即 posted 日期最新的职位。

点击“运行”:首页会显示 12 jobs open 和 Newest: Python Developer at Brightline。

亲手试试

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 icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

基于类的视图中的所有课

自己练习: Django 在线编辑器