【问题标题】:django.urls.exceptions.NoReverseMatch: Reverse for 'results' not found. 'results' is not a valid view function or pattern namedjango.urls.exceptions.NoReverseMatch:找不到“结果”的反向。 “结果”不是有效的视图函数或模式名称
【发布时间】: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”。

标签: python django


【解决方案1】:

您在视图中使用了reversevote。将第一个参数从“polls:results”更改为“polls:result”或“result”。

Reverse 用于指向urls.py 中定义的 URL 模式。查看 urlpatterns 中的第三个条目,您已为其提供了名称“result”。 这应该可以解决您的问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-12-01
    • 2021-05-18
    • 2018-03-29
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多