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.
Thử thách
Trung bìnhTạo một trang cho mỗi tác giả tại /authors/<id>/ với tên author_detail.
- Trong
books/views.py, viếtauthor_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. - Trong
author_list.html, liên kết tên trong mỗi thẻ<h2>đến trang của tác giả đó. - 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})
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