我在 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
视图等等。
我自己开始学习 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
中提供路径。
例如:
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
视图等等。