我在 django 中遇到 url 问题,我有 "Page not found"

I have a problem with urls in django, and I have "Page not found"

我自己开始学习 Django,对 URL 和路径的工作原理理解有问题。

错误信息是:

Page not found (404)
Request Method: GET
Request URL: http://127.0.0.1:8000/question/1/
Using the URLconf defined in not_bad.urls, Django tried these URL patterns, in this order:
[name='index']
[name='detail']
[name='results']
[name='vote']
microsanya/
The current path, question/1/, didn't match any of these.

在项目文件中我有这样的代码:

not_bad\urls.py:

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

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

polls/urls.py:

from django.urls import include, path
from . import views

app_name = 'polls'

urlpatterns = [
    path('', views.index, name='index'),
    path('', views.detail, name='detail'),
    path('', views.results, name='results'),
    path('', views.vote, name='vote' ),
]

polls/views.py

from django.http import HttpResponse
from django.shortcuts import get_object_or_404, render
from django.shortcuts import redirect
from django.shortcuts import render
from django.http import Http404

from . models import Question, Choice


def index(request):
    question = Question.objects.all()
    return render(request, "index.html", {"latest_questions": Question.objects.order_by('-pub_date')[:5]})


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


def answer(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    try:
        question = question.question_set.get(pk=request.POST['question'])
    except (KeyError, Question.DoesNotExist):
        return render(request, 'answer.html', {'question': question, 'error_message': 'Question does not exist'})
    else:
        if question.correct:
            return render(request, "index.html", {"latest_questions": Question.objects.order_by('-pub_date')[:5], "message": "Nice! Choose another one!"})
        else:
            return render(request, 'answer.html', {'question': question, 'error_message': 'Wrong Answer!'})

def results(request, question_id):
    response = "You're looking at the results of question %s."
    return HttpResponse(response % question_id)

def vote(request, question_id):
    return HttpResponse("You're voting on question %s." % question_id)

我有名为 index.html 和 answer.html 的文件,但我认为问题不在其中。

您需要在 urlpatterns 中提供路径。

例如:

/urls.py

urlpatterns = [
    path('question/', include('polls.urls')),
    # ...
]

polls/urls.py

app_name = 'polls'
urlpatterns = [
    path('', views.index, name='index'),
    path('<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' ),
]

在此示例中,您应用的所有路径都将从 /question/ 开始,然后索引(准确)路径将指向 index 视图,/question/1/ 指向 detail 视图等等。