Menu
CoddyTech

Một trang tác giả

Thuộc phần Model và trang quản trị trong hành trình Django của Coddy. Bài học 23 trên 23.

Mảnh ghép cuối cùng: mỗi tác giả có trang riêng, được liên kết từ mọi nơi xuất hiện tên tác giả. Đây là trang sách bạn đã xây dựng trong phần này, nhưng dành cho một model khác.

Hãy nghĩ về ba cách truy cập. Một khách truy cập tại /authors/ nhấp vào tên. Một khách truy cập trên trang sách nhấp vào "by Frank Herbert". Và có người nhập địa chỉ của một tác giả không tồn tại, khi đó cần nhận được lỗi 404 chứ không phải lỗi sập chương trình.

Tạo mọi liên kết bằng {% url %} và id của tác giả, để các liên kết tự cập nhật theo urls.py nếu tệp này thay đổi.

challenge icon

Thử thách

Trung bình

Tạo một trang cho mỗi tác giả tại /authors/<id>/ với tên author_detail.

  1. Trong books/views.py, viết author_detail(request, pk) để hiển thị books/author_detail.html: tên trong thẻ <h1>, liên kết đến từng cuốn sách và trả về 404 nếu không tìm thấy ID. Thêm đường dẫn tương ứng.
  2. Trong author_list.html, liên kết tên trong mỗi thẻ <h2> đến trang của tác giả đó.
  3. Trong book_detail.html, chỉ liên kết tên tác giả: by <a href="/authors/1/">Frank Herbert</a>.

Trên /authors/, hãy nhấp vào Frank Herbert: trang của ông ấy liên kết đến Children of Dune và Dune.

Tự làm thử

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 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 Model và trang quản trị

Tự luyện tập: Playground Django