Invalid url atau alamat website tidak valid, dapat saja di entry oleh client. Untuk kasus ini kita dapat gunakan dua pendekatan, yaitu HttpResponseNotFound() atau Http404.
Melanjutkan project dari modul sebelumnya, jika Anda entry link dengan category diluar yang disediakan oleh my_app/views.py, akan terjadi error.

Side Note: Response pada screen capture diatas sangat detail, karena setting debug = true. Hal ini cocok digunakan dalam mode development. Jika sudah di deploy ke server, harus di setting debug = false. Untuk mengubah setting lihat file settings.py pada project level.
Untuk mencegah error diatas, dan kita tetap mengembalikan halaman yang informatif bagi user kita dapat gunakan HttpResponseNotFound() atau Http404.
Pendekatan HttpResponseNotFound()
Buka file my_app/views.py, lalu ubah seperti berikut:
from django.shortcuts import render
from django.http import HttpResponse, HttpResponseNotFound
sp_cat = {
'web': 'Web Dev Page',
'ds' : 'Data Science Page',
'iot' : 'IoT Dev Page'
}
#menggunakan try except dan HttpResponseNotFound
def cat_view(request, cat):
try:
res = sp_cat[cat]
return HttpResponse(res)
except:
return HttpResponseNotFound("No category found")
def add_view(request, num1, num2):
res = num1 + num2
return HttpResponse(str(res))
Jika IDE tidak otomatis menambahkan library, import library HttpResponseNotFound dari django.http
Kita gunakan try except block untuk catch error. Jika terjadi error karena user memasukan url yang tidak tepat, block except akan dijalankan, response yang dikembalikan berupa http not found.
Jika kita test, akan ditampilkan seperti berikut

HttpResponseNotFound sendiri mengembalikan http 404, yang berarti http not found. Namun kekurangan dari fungsi ini adalah kita harus mendefinisikan isi html.
Untuk itu, django menyediakan default template untuk http 404 , dan dapat kita gunakan untuk keperluan ini.
Pendekatan Http404 exception
Masih menggunakan file my_app/views.py
from django.shortcuts import render
from django.http import Http404, HttpResponse
sp_cat = {
'web': 'Web Dev Page',
'ds' : 'Data Science Page',
'iot' : 'IoT Dev Page'
}
#menggunakan try except dan Http404
def cat_view(request, cat):
try:
res = sp_cat[cat]
return HttpResponse(res)
except:
raise Http404("404 Category Not Found")
def add_view(request, num1, num2):
res = num1 + num2
return HttpResponse(str(res))
Library yang digunakan adalah Http404 dari django.http.
Untuk memanggil Http404, kita gunakan perintah raise. Django akan menampilkan default 404 page yang disediakan.
Pada modul template, kita akan bahas penggunaan template yang kita buat untuk keperluan http 404.
Jika Anda test, maka akan ditampilkan seperti berikut

Sampai disini kita sudah mempelajari penggunaan HttpResponseNotFound dan Http404 untuk menampilkan halaman yang tidak ditemukan.