【发布时间】:2021-04-25 23:52:31
【问题描述】:
我知道这个问题已经被问过了,但没有一个解决方案是针对我正在使用的 Django 版本的,即 3.2。所以我正在关注 Django 教程,但我收到了这个错误。我在 Django 中使用通用视图,就像教程一样。在使用通用视图之前,一切正常。我必须硬编码我的视图还是我错误地实现了通用视图?
Internal Server Error: /polls/
Traceback (most recent call last):
File "C:\Users\miche\tutorial-env\lib\site-packages\django\core\handlers\exception.py", line 47, in inner
response = get_response(request)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\core\handlers\base.py", line 204, in _get_response
response = response.render()
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\response.py", line 105, in render
self.content = self.rendered_content
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\response.py", line 83, in rendered_content
return template.render(context, self._request)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\backends\django.py", line 61, in render
return self.template.render(context)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\base.py", line 170, in render
return self._render(context)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\base.py", line 162, in _render
return self.nodelist.render(context)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\defaulttags.py", line 312, in render
return nodelist.render(context)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\base.py", line 938, in render
bit = node.render_annotated(context)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\defaulttags.py", line 211, in render
nodelist.append(node.render_annotated(context))
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\base.py", line 905, in render_annotated
return self.render(context)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\template\defaulttags.py", line 446, in render
url = reverse(view_name, args=args, kwargs=kwargs, current_app=current_app)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\urls\base.py", line 86, in reverse
return resolver._reverse_with_prefix(view, prefix, *args, **kwargs)
File "C:\Users\miche\tutorial-env\lib\site-packages\django\urls\resolvers.py", line 694, in _reverse_with_prefix
raise NoReverseMatch(msg)
django.urls.exceptions.NoReverseMatch: Reverse for 'detail' with arguments '(1,)' not found. 1 pattern(s) tried: ['polls/<int:pk/$']
[25/Apr/2021 17:05:11] "GET /polls/ HTTP/1.1" 500 133372
Not Found: /polls/1/
[25/Apr/2021 17:33:23] "GET /polls/1/ HTTP/1.1" 404 2715
这是我的代码: 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" ),
]
views.py
from django.http import HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse
from django.views import generic
from .models import Choice, Question
# Create your views here.
class IndexView(generic.ListView):
template_name = "polls/index.html"
context_object_name = "latest_question_list"
def get_queryset(self):
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 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):
return render(request, "polls/detail.html",
{"question": question,
"error_message": "You didn't select a choice",
})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse("polls:results", args=
(question.id,)))
index.html
{% if latest_question_list %}
<ul>
{% for question in latest_question_list %}
<li><a href="{% url 'polls:detail' question.id %}">{{ question.question_text }}</a></li>
{% endfor %}
</ul>
{% else %}
<p>No polls are available.</p>
{% endif %}
【问题讨论】:
标签: python python-3.x django