Các phần mẫu
Thuộc phần API JSON trong hành trình Django của Coddy. Bài học 14 trên 19.
Một script không phải lúc nào cũng cần JSON. Sau khi thêm một tác vụ, nó có thể yêu cầu máy chủ gửi phần <li> đã tạo sẵn cho tác vụ đó rồi chèn vào danh sách. Một template đã tạo hàng đó, vì vậy máy chủ nên dùng lại nó.
Django 6.0 bổ sung các phần template: một phần có tên trong template mà bạn cũng có thể kết xuất riêng. Bọc phần đó trong {% partialdef name %} và {% endpartialdef %}; khi thêm từ inline, phần đó cũng được hiển thị tại chỗ, một lần cho mỗi phần tử trong vòng lặp. Một view chỉ kết xuất phần có tên template, # và tên của phần:
{% partialdef cart-total inline %}
<strong>{{ cart.total }}</strong>
{% endpartialdef %}return render(request, "shop/cart.html#cart-total", {"cart": cart})Ngữ cảnh phải chứa những gì phần đó đọc, ở đây là cart. Trang và phần đó dùng chung một đoạn markup, nên chúng không thể lệch nhau.
Thử thách
Trung bìnhChỉ hiển thị một hàng riêng trên trang /tasks/ mới.
- Trong
tasks/list.html, biến<li>trong vòng lặp thành partialinlinecó têntask-row, để/tasks/vẫn hiển thị mọi hàng. - Trong
tasks/views.py, thêmtask_row(request, pk): chỉ kết xuất partial đó, truyềntaskvào hoặc hiển thị trang 404 của Django. - Trong
tasks/urls.py, thêm"tasks/<int:pk>/row/"với têntask_row.
Mở /tasks/3/row/: chỉ hiển thị Call the bank (done), không có tiêu đề.
Tự làm thử
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>All tasks</title>
</head>
<body>
<h1>All tasks</h1>
<ul id="tasks">
{% for task in tasks %}
<li id="task-{{ task.id }}">{{ task.title }}{% if task.done %} (done){% endif %}</li>
{% endfor %}
</ul>
</body>
</html>
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 API JSON
Tự luyện tập: Playground Django