修改 views在这我们将使用两个通用视图: ListView 和 DetailView 。这两个视图分别用于显示两种抽象概念 “显示一系列对象的列表” 和 “显示一个特定类型的对象的详细信息页”。 - 每个视图都需要知道使用哪个模型数据。因此需要提供将要使用的
model 参数。 DetailView 通用视图期望从 URL 中捕获名为 "pk" 的主键值,因此我们将 poll_id 改为 pk 。
默认情况下, DetailView 通用视图使用名为 <应用名>/<模型名>_detail.html 的模板。在我们的例子中,将使用名为 "polls/poll_detail.html" 的模板。 template_name 参数是告诉 Django 使用指定的模板名,而不是使用自动生成的默认模板名。 我们也指定了 results 列表视图的 template_name – 这确保了 results 视图和 detail 视图渲染时会有不同的外观,虽然它们有一个 DetailView 隐藏在幕后。 同样的,ListView 通用视图使用的默认模板名为 <应用名>/<模型名>_list.html ;我们指定了 template_name 参数告诉 ListView 使用已经存在的 "polls/index.html" 模板。 在之前的教程中,模板提供的上下文中包含了 poll 和 latest_poll_list 上下文变量。在 DetailView 中 poll 变量是自动提供的 – 因为我们使用了一个 Django 模型 (Poll ) ,Django 能够为上下文变量确定适合的名称。 另外 ListView 自动生成的上下文变量名是 poll_list 。若要覆盖此变量我们需要提供 context_object_name 选项, 我们想要使用 latest_poll_list 来替代它。作为一种替代方式,你可以改变你的模板来 匹配新的默认的上下文变量 – 但它是一个非常容易地告诉 Django 使用你想要的变量的方式。 现在你可以在 polls/views.py 中删除 index() , detail() 和 results() 视图了。 我们不需要它们了 – 它们已替换为通用视图了。你也可以删除不再需要的 HttpResponse 导入包了。 运行服务器,并且使用下基于通用视图的新投票应用。 |