"Page Not Found (404)" in Writing your first Django app, part 4

I’m currently working through the “Writing Your First Django App, Part 4” and have just created the polls/results.html template.

However, now when I try to run the server, I get this error:

" Page not found (404)

Request Method: GET
Request URL: http://127.0.0.1:8000/

Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:

  1. polls/
  2. admin/

The empty path didn’t match any of these."

The server appears to be running in the terminal, but copying and pasting the link into the address bar returns the error above in my web browser.

Here is my code for views.py:

from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django.template import loader
from django.views import generic

from .models import Choice, Question

class IndexView(generic.ListView):
    template_name = "polls/index.html"
    context_object_name = "latest_question_list"

    def get_queryset(self):
        """Return the last five published questions."""
        return Question.objects.order_by("-pub_date")[:5]
    
class DetailView(generic.DetailView):
    model = Question
    template_name = "polls/detail.html"

class ResultsView(generic.DetailView):
    model = Question
    template_name = "polls/results.html"

def index(request):
    latest_question_list = Question.objects.order_by("-pub_date")[:5]
    context = {"latest_question_list": latest_question_list}
    return render(request, "polls/index.html", context)

def index(request):
    latest_question_list = Question.objects.order_by("-pub_date")[:5]
    template = loader.get_template("polls/index.html")
    context = {
        "latest_question_list": latest_question_list,
    }
    return HttpResponse(template.render(context, request))

def index(request):
    return HttpResponse("Hello, world. You're at the polls index.")

def index(request):
    latest_question_list = Question.objects.order_by("-pub_date")[:5]
    output = ", ".join([q.question_text for q in latest_question_list])
    return HttpResponse(output)

def detail(request, question_id):
    return HttpResponse("You're looking at question %s." % question_id)

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

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

def vote(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST["choice"])
    except (KeyError, Choice.DoesNotExist):
        # Redisplay the question voting form.
        return render(
            request,
            "polls/detail.html",
            {
                "question": question,
                "error_message": "You didn't select a choice.",
            },
        )
    else:
        selected_choice.votes += 1
        selected_choice.save()
        # Always return an HttpResponseRedirect after successfully dealing
        # with POST data. This prevents data from being posted twice if a
        # user hits the Back button.
        return HttpResponseRedirect(reverse("polls:results", args=(question.id,)))

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

And here is my code for polls\urls.py:

```from django.urls import path

from . import views

app_name = "polls"
urlpatterns = [
    path("", views.IndexView.as_view(), name="index"),
    path("<int:pk>/", views.DetailView.as_view(), name="detail"),
    path("<int:pk>/results/", views.ResultsView.as_view(), name="results"),
    path("<int:question_id>/vote/", views.vote, name="vote"),
]

urlpatterns = [
    path("", views.index, name="index"),
    path("specifics/<int:question_id>/", views.detail, name="detail"),
    path("<int:question_id>/results/", views.results, name="results"),
    path("<int:question_id>/vote/", views.vote, name="vote"),
    path("specifics/<int:question_id>/", views.detail, name="detail"),
]```

Actually, this message is correct. The “bare” url is not valid at this point in time.

The tutorial says:

Now, go to /polls/1/ in your browser and vote in the question.

That’s the only url given to you in this step.

/polls/1/ doesn’t work either. It gives me this error:

Page not found (404)

Request Method: GET
Request URL: http://127.0.0.1:8000/polls/1/

Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:

  1. polls/ [name=‘index’]
  2. admin/

The current path, polls/1/, didn’t match any of these.

You appear to have two definitions for urlpatterns in your urls.py file. There should only be one.

Side note: The text for your first file posted ends with ''' instead of ```, and you have it on the end of the line rather than on the next line by itself. That’s why both files are showing in the same block.
Each line of ``` must be lines by themselves.

I think the reason there are 2 is because I was supposed to revise the original definition for urlpatterns, rather than create a new one.

I removed the duplicate and left the updated definition, so now my urls.py looks like this:

from django.urls import path

from . import views

app_name = "polls"
urlpatterns = [
    path("", views.IndexView.as_view(), name="index"),
    path("<int:pk>/", views.DetailView.as_view(), name="detail"),
    path("<int:pk>/results/", views.ResultsView.as_view(), name="results"),
    path("<int:question_id>/vote/", views.vote, name="vote"),
]

However, I’m still getting the same error.

Re side note: yes, I can now see I used ‘’’ instead of ``` and forgot the line break. I’ll try to remember that in the future.

Please post your root urls.py file, and the complete error message you’re currently getting.

Root urls.py file:

from django.contrib import admin
from django.urls import include, path


urlpatterns = [
    path("polls/", include("polls.urls")),
    path('admin/', admin.site.urls),
]

Error message:

Page not found (404)
Request Method:	GET
Request URL:	(for some reason the forum won't let me post the link again, but it's the same as before)
Using the URLconf defined in mysite.urls, Django tried these URL patterns, in this order:

polls/ [name='index']
admin/
The current path, polls/1/, didn’t match any of these.

Side note: If you enclose a url between single backticks, then they aren’t registered as a link.
e.g.
`http://127.0.0.1`

I’m noticing that you’ve got similar duplication issues in your views file. You’ll want to clean those up even though I don’t think that this is causing you any problems yet.

Are you stopping and restarting your server after making each of these changes?

The duplicates in my views file came about when I wasn’t sure if I was supposed to edit the original definitions for each function, or merge them under a single definition, so that each function would have multiple statements. Actually, I’m still not sure.

I have stopped and restarted my server many times, even including restarting Visual Studio to no avail. All changes have been saved and the server restarted afterwards. Still getting the same error.

I believe I have found the problem.

I actually had a separate terminal window open (CMD) which was also running the server at the same time. I closed it and now the webpage is loading as normal.