Menu
CoddyTech

单个作者页面

本课属于 Coddy Django 学习旅程的“模型和管理后台”单元。第 23 课,共 23 课。

最后一步:每位作者都有自己的页面,凡是出现作者姓名的地方都会链接到这个页面。这就是你在本单元为另一个模型创建的图书页面。

想一想有哪三种访问方式。访客在 /authors/ 页面点击姓名。访客在某本书的页面点击“by Frank Herbert”。还有人输入一位不存在的作者的地址,这时应该返回 404,而不是崩溃。

使用 {% url %} 和作者的 id 来创建每个链接,这样即使 urls.py 发生变化,链接也会随之更新。

challenge icon

挑战

中等

为每位作者创建一个位于 /authors/<id>/ 的页面,名为 author_detail。

  1. 在 books/views.py 中,编写 author_detail(request, pk),渲染 books/author_detail.html:在 <h1> 中显示姓名,为每本书添加链接,并在 id 未知时返回 404。添加对应的路由。
  2. 在 author_list.html 中,将每个 <h2> 中的姓名链接到对应作者的页面。
  3. 在 book_detail.html 中,只为作者姓名添加链接:by <a href="/authors/1/">Frank Herbert</a>。

在 /authors/ 页面点击 Frank Herbert:他的页面会链接到 Children of Dune 和 Dune。

亲手试试

from django.shortcuts import get_object_or_404, render

from .models import Author, Book


def home(request):
    books = Book.objects.select_related("author")
    return render(request, "books/home.html", {"books": books})


def book_detail(request, pk):
    book = get_object_or_404(Book, pk=pk)
    return render(request, "books/book_detail.html", {"book": book})


def search(request):
    q = request.GET.get("q", "")
    books = Book.objects.filter(title__icontains=q).select_related("author")
    return render(request, "books/search.html", {"q": q, "books": books})


def author_list(request):
    authors = Author.objects.prefetch_related("books")
    return render(request, "books/author_list.html", {"authors": authors})
quiz icon自我测试

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

模型和管理后台中的所有课

自己练习: Django 在线编辑器