Gli errori 404 in Django possono essere gestiti in diversi modi, permettendo di personalizzare il messaggio d’errore visualizzato agli utenti quando visitano una pagina non esistente.
Prima di tutto, Django include una funzione incorporata `get_object_or_404()`. Questa funzione può essere utilizzata per sostituire l’uso comune di `get()`. Ad esempio, se si sta cercando di recuperare un oggetto da un modello, si potrebbe normalmente scrivere:
```
try:
oggetto = Modello.objects.get(pk=1)
except Modello.DoesNotExist:
raise Http404(“L’oggetto non esiste”)
```
Usando `get_object_or_404()`, il codice diventa più conciso:
```
from django.shortcuts import get_object_or_404
oggetto = get_object_or_404(Modello, pk=1)
```
La funzione `get_object_or_404()` lancia un’eccezione `Http404` se l’oggetto non esiste. Questa eccezione può essere intercettata e trattata nel proprio codice, oppure si può lasciare che Django la gestisca automaticamente e mostri una pagina d’errore 404 di default.
Tuttavia, potrebbe essere preferibile avere una propria pagina d’errore personalizzata. Per farlo, bisogna creare un template chiamato `404.html` nella cartella templates del proprio progetto. Questa pagina verrà visualizzata ogni volta che Django incontra un errore 404. È possibile personalizzare questo template in qualsiasi modo si desideri, ad esempio includendo un link alla homepage o ad altri punti importanti del tuo sito web.
È importante notare che per far funzionare questo tipo di gestione degli errori, si deve avere `DEBUG = False` nel proprio file di configurazione `settings.py` di Django. Durante lo sviluppo, usufruire del DEBUG mode consente di vedere gli errori completi delle pagine quando qualcosa va storto. Tuttavia, in produzione, non si vuole che questi dettagli siano visibili agli utenti, e quindi si deve impostare `DEBUG = False`.
Infine, Django fornisce una vista predefinita per la gestione degli errori 404, `django.views.defaults.page_not_found`. Se non si fornisce un proprio template 404, Django utilizza questa vista predefinita.
Fonti:
- Django Project Documentation: https://docs.djangoproject.com/en/3.2/topics/http/views/
- Django Project Documentation: https://docs.djangoproject.com/en/3.2/topics/http/views/#the-http404-exception
- Real Python: https://realpython.com/django-views/#handling-http-404-errors
- MDN Web Docs: https://developer.mozilla.org/en-US/docs/Learn/Server-side/Django/sessions