Xử lý lỗi 404 trong Python Django
Lập trình web với Python bằng Django

Danh sách bài học
Xử lý lỗi 404 trong Python Django
Nội dung bài viết Học nhanh
Ghi chú
Nội dung bài viết bạn đang xem được update từ tháng 06/2019. Vì vậy sẽ có đôi chút khác biệt giữ VIDEO và NỘI DUNG BÀI VIẾT.
Chúng ta sẽ có nhiều cập nhập hơn về cả bài viết lẫn video trong thời gian tới. Nhớ like/ share hoặc đánh giá 5 sao để Kteam có động lực nhé!
Cảm ơn các bạn!
Dẫn nhập
Ở bài trước, Kteam đã hướng dẫn các bạn xong cách LOẠI BỎ HARDCODED URL TRONG PYTHON DJANGO.
Trong bài này Kteam sẽ hướng dẫn cho các bạn cách xử lý lỗi 404 trong Python Django.
Nội dung
Để theo dõi bài này tốt nhất, bạn nên xem qua bài:
- GIỚI THIỆU VỀ PYTHON DJANGO
- TẠO PROJECT VỚI PYTHON DJANGO
- TẠO WEB APP VÀ XỬ LÝ KHI NGƯỜI DÙNG YÊU CẦU TRUY CẬP TRONG PYTHON DJANGO
- SỬ DỤNG TEMPLATE VÀ JINJA TRONG PYTHON DJANGO
- FILE TĨNH VÀ THIẾT KẾ WEB BẰNG BOOTSTRAP TRONG PYTHON DJANGO
- THIẾT KẾ HOÀN CHỈNH BLOG TRONG PYTHON DJANGO
- DÙNG MODEL TẠO BẢNG DATABASE BẰNG NGÔN NGỮ PYTHON
- TƯƠNG TÁC DATABASE BẰNG NGÔN NGỮ PYTHON
- HỆ THỐNG ADMIN TRONG PYTHON DJANGO
- LIỆT KÊ DANH SÁCH BÀI VIẾT TRONG PYTHON DJANGO
- HIỂN THỊ THÔNG TIN BÀI VIẾT TRONG PYTHON DJANGO
- LOẠI BỎ HARDCODED URL TRONG PYTHON DJANGO.
Bài này sẽ giới thiệu những nội dung sau:
- Lỗi 404 là gì?
- Cách trả lỗi 404
- Custom template 404
Lỗi 404 là gì?
Lỗi 404 trong HTTP là không tìm ra được đường dẫn url. Ví dụ Kteam thử nhập 1 đường dẫn không tồn tại
Django sẽ tự trả về lỗi 404 cho mình. Tuy nhiên ta sẽ gặp vấn đề như sau, ở đường dẫn bài viết mình thử vô một url có id bài viết không tồn tại
Mặc dù đường dẫn url mình nhập vào vẫn đúng theo quy tắc đặt path.Tuy nhiên, hiện tại Blog của mình chỉ có 2 bài viết, nên ở đường dẫn có bài viết id = 12 nó sẽ tạo ra bug ở câu truy vấn. Ta cần phải xử lý ở đây phải trả về 404, không thể quăng lỗi kiểu này cho người dùng được.
Cách trả lỗi 404
Vậy ta để xử lý khi xử lý ở Post với id không tồn tại, Kteam sẽ dùng thêm exception 404 của Django. Ở views.py trong app blog
Sau đó ta thay câu truy vấn như sau
Custom template 404
Ở template 404 hiện tại là hiển thị ở chế độ Debug để giúp dân lập trình có thể biết nguyên nhân và tìm ra bug. Còn chúng ta hãy thử xem template 404 ở người dùng
Nhìn nó khá là bình thường, bây giờ Kteam sẽ tạo template mới xử lý 404. Ở template app home, ta tạo thêm 1 template error.html như sau:
Ta sẽ override hàm xử lý 404 như sau, ở views.py trong app home:
Ở urls.py tổng, ta thực hiện như sau:
Để hiển thị template này, ta phải tắt chế độ Debug, ta qua setting chuyển biến DEBUG thành false, đồng thời khai báo host cho phép ở server thật. Kteam sẽ đưa kí tự ‘*’ để báo Django là bất kì host nào cũng chấp nhận:
Ta sẽ xem kết quả:
Kết
Như vậy Kteam đã hướng dẫn các bạn xong cách xử lý lỗi 404 trong Python Django.
Ở bài tiếp theo, Kteam sẽ giới thiệu cho các bạn DJANGO SỬ DỤNG MÔ HÌNH MVC.
Cảm ơn các bạn đã theo dõi bài viết. Hãy để lại bình luận hoặc góp ý của mình để phát triển bài viết tốt hơn. Đừng quên “Luyện tập – Thử thách – Không ngại khó”.
Tải xuống
Tài liệu
Nhằm phục vụ mục đích học tập Offline của cộng đồng, Kteam hỗ trợ tính năng lưu trữ nội dung bài học Xử lý lỗi 404 trong Python Django dưới dạng file PDF trong link bên dưới.
Ngoài ra, bạn cũng có thể tìm thấy các tài liệu được đóng góp từ cộng đồng ở mục TÀI LIỆU trên thư viện Howkteam.com
Đừng quên like và share để ủng hộ Kteam và tác giả nhé!

Thảo luận
Nếu bạn có bất kỳ khó khăn hay thắc mắc gì về khóa học, đừng ngần ngại đặt câu hỏi trong phần bên dưới hoặc trong mục HỎI & ĐÁP trên thư viện Howkteam.com để nhận được sự hỗ trợ từ cộng đồng.
Tác giả/Dịch giả
Khóa học
Lập trình web với Python bằng Django
Lập trình web với Python bằng Django
nếu dùng:
VSCode: Class 'Post' has no 'DoesNotExist' member
nếu dùng code trên phải fix thế nào mọi người?
a cho e hỏi ở chỗ : urls.py tổng
handler404 = 'home.views.error' mình chưa import thì xao hiểu được anh nhỉ, e đang bị error chỗ đó anh ạ
?: (urls.E007) The custom handler404 view 'home.views.error' does not take the correct number of arguments (request, exception).