Django Views - details and 404

Posted under » Django on 6 May 2021

From learning index views template, lets tackle the details page.

from django.http import Http404
from django.shortcuts import render
from .models import Question

def detail(request, question_id):
    question = Question.objects.get(pk=question_id)
except Question.DoesNotExist:
    raise Http404("Question does not exist")
return render(request, 'polls/detail.html', {'question': question}):

You can change the template polls/templates/polls/detail.html to just

{{ question }}

It’s a very common idiom to use get() and raise Http404 if the object doesn’t exist. Django provides a shortcut. Here’s the detail() view, rewritten

from django.shortcuts import get_object_or_404, render
from .models import Question

def detail(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/detail.html', {'question': question})

Back to the detail() view for our poll application. Given the context variable question, here’s what the polls/detail.html template might look like:

<h1>{{ question.question_text }}</h1>
{% for choice in question.choice_set.all %}
    <li>{{ choice.choice_text }}</li>
{% endfor %}

web security linux ubuntu python django git Raspberry apache mysql php drupal cake javascript css AWS