Django: как перенести исключение "страница не найдена" и контекст из функции в представление на основе класса?

Я конвертирую простую функцию в представление на основе классов. Я нашел хороший ресурс с примерами, который помог мне в прошлом лучше понять всю тему (можно найти здесь), но я не смог найти хороший пример того, как обрабатывать исключения, связанные со страницей в представлении на основе класса, когда страница не найдена (например, кто-то делает опечатку в URL).

Я также не уверен, как обрабатывать дополнительный контекст, который я хочу также передать в представление на основе класса.

Я был бы признателен за помощь и предложения, основанные на этом простом примере ниже. Моя цель - импортировать main View с помощью `from django.views import View' и поместить всю логику в этот класс вместо этой функции.

def meetup_details(request, meetup_slug):

    try:
    selected_meetup = Meetup.objects.get(slug=meetup_slug) 

    return render(request, 'meetups/meetup-details.html', {
        'meetup_found': True,
        'meetup_title': selected_meetup.title, 
        'meetup_description': selected_meetup.description
        })

    except Exception as exc:
        return render(request, 'meetups/meetup-details.html', {
            'meetup_found': False
        })
class MeetupDetailView(DetailView):
       model = Meetup
       template_name = "meetups/meetup-details.html"
       queryset = Meetup.objects.all()
       def get_object(self):
            try:
               self.meetup = Meetup.objects.get(slug=self.kwargs['slug'])
            except Exception as exc:
               self.meetup = None
            return self.meetup

    def get_context_data(self, **kwargs):
        context = super().get_context_data(**kwargs)
        if self.meetup:
           meetup_found = True
           context['meetup_title'] = self.meetup.title
           context['meetup_description'] = self.meetup.description
        else:
           meetup_found = False
        context['meetup_found'] = meetup_found

        return context
Вернуться на верх