DJANGO
CÁC CHỦ ĐỀ
BÀI MỚI NHẤT
MỚI CẬP NHẬT

Thông báo: Download 4 khóa học Python từ cơ bản đến nâng cao tại đây.

Django DetailView trong Python

Trong bài viết này, bạn sẽ học cách sử dụng lớp Django DetailView để hiển thị chi tiết của một đối tượng. Django DetailView là một trong những class-based views mạnh mẽ và tiện lợi nhất của Django, giúp bạn dễ dàng xây dựng các trang web hiển thị thông tin chi tiết của các đối tượng trong cơ sở dữ liệu của bạn. Hướng dẫn này tiếp nối từ phần cuối của hướng dẫn Django ListView, giúp bạn hiểu rõ hơn cách sử dụng và triển khai DetailView trong dự án Django của mình. Bạn sẽ học cách định nghĩa DetailView, tạo template chi tiết, và thiết lập các route cần thiết để hoàn thiện web của bạn.

test php

banquyen png
Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

Django DetailView trong Python là gì?

Django DetailView cho phép bạn định nghĩa một class-based view để hiển thị chi tiết của một đối tượng. Để sử dụng lớp DetailView, bạn định nghĩa một class kế thừa từ lớp DetailView.

Ví dụ, đoạn mã sau định nghĩa một class-based view tên là TaskDetail để hiển thị chi tiết của một nhiệm vụ trong ứng dụng Todo:

from django.shortcuts import render
from django.views.generic.list import ListView
from django.views.generic.detail import DetailView
from .models import Task

class TaskDetail(DetailView):
    model = Task
    context_object_name = 'task'

Cách hoạt động

Đầu tiên, import DetailView từ django.views.generic.detail:

Bài viết này được đăng tại [free tuts .net]

from django.views.generic.detail import DetailView

Thứ hai, định nghĩa một class tên là TaskDetail kế thừa từ DetailView. Trong class TaskDetail, chúng ta định nghĩa các thuộc tính sau:

  • model chỉ định lớp của đối tượng sẽ được hiển thị.
  • context_object_name chỉ định tên của đối tượng trong template. Mặc định, Django sử dụng object làm tên đối tượng trong template. Để rõ ràng hơn, chúng ta sử dụng task làm tên đối tượng.

Mặc định, class TaskDetail sẽ tải template có tên là task_detail.html từ thư mục templates/todo. Nếu bạn muốn sử dụng một tên template khác, bạn có thể sử dụng thuộc tính template_name trong class TaskDetail.

Tạo template task_detail.html Django trong Python

Tạo file template task_detail.html trong thư mục templates/todo với nội dung sau:

{%extends 'base.html'%}

{%block content%}
<article class="task">
    <header>
        <h2>{{ task.title }}</h2>
        <span class="badge {% if task.completed %}badge-completed{% else %}badge-pending{%endif%}">
            {% if task.completed %} Completed {%else%} Pending {%endif%}
        </span>
    </header>
    <p>{{task.description}}</p>
</article>
{%endblock content%}

Template task_detail.html mở rộng từ template base.html. Template này sử dụng đối tượng task và hiển thị các thuộc tính của nhiệm vụ bao gồm tiêu đề, trạng thái (hoàn thành hay chưa) và mô tả.

Khởi tạo route

Khởi tạo một route để ánh xạ URL hiển thị chi tiết một nhiệm vụ với kết quả của phương thức as_view() của class TaskDetail:

from django.urls import path
from .views import home, TaskList, TaskDetail

urlpatterns = [
    path('', home, name='home'),
    path('tasks/', TaskList.as_view(), name='tasks'),
    path('task/<int:pk>/', TaskDetail.as_view(), name='task'),
]

URL chấp nhận một số nguyên là id (hoặc khóa chính, pk) của nhiệm vụ. TaskDetail sẽ lấy tham số pk này, chọn nhiệm vụ từ cơ sở dữ liệu theo id, tạo một đối tượng Task và truyền nó vào template.

Sửa đổi template task_list.html

Sửa đổi template task_list.html để bao gồm liên kết tới từng nhiệm vụ trong danh sách sử dụng thẻ url:

{%extends 'base.html'%}

{%block content%}
<div class="center">
    <h2>My Todo List</h2>
    {% if tasks %}
    <ul class="tasks">
        {% for task in tasks %}
            <li>
                <a href="{% url 'task' task.id %}" class="{% if task.completed %}completed{%endif%}">{{ task.title }}</a>
                <div class="task-controls">
                    <a href="#"><i class="bi bi-trash"></i> </a>
                    <a href="#"><i class="bi bi-pencil-square"></i></a>
                </div>
            </li>
        {% endfor %}
    {% else %}
        <p>???? Yay, bạn không có nhiệm vụ nào đang chờ!</p>
    {% endif %}
    </ul>
</div>
{%endblock content%}

Khi bạn nhấp vào liên kết của từng nhiệm vụ, bạn sẽ được chuyển hướng đến trang chi tiết của nhiệm vụ đó.

Chạy server phát triển Django:

python manage.py runserver

Mở danh sách nhiệm vụ:

http://127.0.0.1:8000/tasks/

Bạn sẽ thấy danh sách các nhiệm vụ. Khi nhấp vào một nhiệm vụ, ví dụ: "Learn Python", bạn sẽ được chuyển hướng đến trang chi tiết của nhiệm vụ đó.

Kết bài

Việc sử dụng Django DetailView là một cách hiệu quả để hiển thị chi tiết của các đối tượng trong ứng dụng Django của bạn. Với những kiến thức bạn đã học được từ hướng dẫn này, bạn có thể dễ dàng triển khai các trang web hiển thị thông tin chi tiết của đối tượng một cách linh hoạt và tiện lợi. Hãy thử áp dụng các khái niệm và kỹ thuật đã học vào dự án của bạn và tận dụng Django để xây dựng các ứng dụng web và linh hoạt.

Cùng chuyên mục:

Cách thêm Progress Bar trong Python với chỉ một dòng Code

Cách thêm Progress Bar trong Python với chỉ một dòng Code

Toán tử Walrus Operator- Tính năng mới trong Python 3.8

Toán tử Walrus Operator- Tính năng mới trong Python 3.8

Cách nạp dữ liệu Machine Learning từ File trong Python

Cách nạp dữ liệu Machine Learning từ File trong Python

Hướng dẫn sử dụng Google Sheets API với Python

Hướng dẫn sử dụng Google Sheets API với Python

Xây dựng  web Python tự động hóa Twitter | Flask, Heroku, Twitter API & Google Sheets API

Xây dựng web Python tự động hóa Twitter | Flask, Heroku, Twitter API & Google Sheets API

Xây dựng Web Machine Learning đẹp mắt với Streamlit và Scikit-learn trong Python

Xây dựng Web Machine Learning đẹp mắt với Streamlit và Scikit-learn trong Python

Hướng dẫn tạo Chatbot đơn giản bằng PyTorch

Hướng dẫn tạo Chatbot đơn giản bằng PyTorch

11 mẹo và thủ thuật để viết Code Python hiệu quả hơn

11 mẹo và thủ thuật để viết Code Python hiệu quả hơn

Hướng dẫn làm ứng dụng TODO với Flask dành cho người mới bắt đầu trong Python

Hướng dẫn làm ứng dụng TODO với Flask dành cho người mới bắt đầu trong Python

Hướng dẫn viết Snake Game bằng Python

Hướng dẫn viết Snake Game bằng Python

Cách sử dụng chế độ interactive trong Python

Cách sử dụng chế độ interactive trong Python

Cách sử dụng Python Debugger với hàm breakpoint()

Cách sử dụng Python Debugger với hàm breakpoint()

Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit

Xây dựng ứng dụng Web Style Transfer với PyTorch và Streamlit

Cách cài đặt Jupyter Notebook trong môi trường Conda và thêm Kernel

Cách cài đặt Jupyter Notebook trong môi trường Conda và thêm Kernel

Hướng dẫn xây dựng ứng dụng dự đoán giá cổ phiếu bằng Python

Hướng dẫn xây dựng ứng dụng dự đoán giá cổ phiếu bằng Python

Hướng dẫn tạo ứng dụng AI hội thoại với NVIDIA Jarvis trong Python

Hướng dẫn tạo ứng dụng AI hội thoại với NVIDIA Jarvis trong Python

Hỗ trợ Async trong Django 3.1

Hỗ trợ Async trong Django 3.1

8 mẹo tái cấu trúc Python giúp mã sạch hơn và Pythonic

8 mẹo tái cấu trúc Python giúp mã sạch hơn và Pythonic

Ý nghĩa của if __name__ ==

Ý nghĩa của if __name__ == "__main__" trong Python

Cách xóa phần tử trong danh sách Python

Cách xóa phần tử trong danh sách Python

Top