【发布时间】:2018-09-23 10:59:06
【问题描述】:
Views.py
from django.shortcuts import render, get_object_or_404
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from . models import Question
from django.template import loader, RequestContext
# Create your views here.
def index(request):
latest_questions = Question.objects.all()[:5]
context = {'latest_questions': latest_questions}
return render(request, 'polls/index.html', context)
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():
return render(request, 'polls/detail.html', {'question': question, 'error_message' : "Please select a choice"})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))
我得到这个结果没有反向匹配,因为它不是一个有效的视图函数。我是 Django 的新手。我该如何解决这个问题?这是否意味着我的 view.py 代码有问题,或者我正在学习教程时可能是什么问题。
polls/urls.py
from django.conf.urls import url
from . import views
urlpatterns=[
url(r'^$', views.index,name='index'),
url(r'^(?P<question_id>[0-2]+)/$', views.detail, name='detail'),
url(r'^(?P<question_id>[0-2]+)/results', views.results, name='result'),
url(r'^(?P<question_id>[0-2]+)/votes', views.vote, name='vote'),
]
这是 polls/templates/polls/results.html 文件
Results.html
{% extends 'polls/base.html' %}
{% block main_content %}
<h1>{{question.question_text}}</h1>
<ul>
{% for choice in question.choice_set.all %}
<li> {{choice.choice_text}} -- {{choice.votes}} vote{{ choice.votes|pluralize}}</li>
{% endfor %}
</ul>
<a href="{% url 'polls:detail' question.id %}">Vote Again?</a>
{% endblock %}
这个 mysite/urls.py 我在那里使用了命名空间。可能是什么问题。
Mysite/urls.py
from django.contrib import admin
from django.conf.urls import url, include
urlpatterns = [
url(r'^admin/', admin.site.urls),
url(r'^polls/', include(('polls.urls', 'polls'), namespace='polls')),
]
【问题讨论】:
-
您的网址格式被命名为“result”,而不是“results”。