Django Проект опроса: обратный вариант для 'polls.index' не найден - PullRequest
0 голосов
/ 06 мая 2020

Я пытаюсь завершить sh мой Django Проект опросов из Django документации, но я столкнулся с тем, что «Обратный вариант для 'polls.index' не найден. 'Polls.index' не является допустимым представлением название функции или шаблона ". ошибка.

Полную информацию об ошибке можно увидеть здесь

Ниже приведены мои файлы.

base. html

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <link
      rel="stylesheet"
      href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css"
      integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh"
      crossorigin="anonymous"
    />
    <title>Pollster {% block title %}{% endblock %}</title>
  </head>
  <body>
    <div class="container">
      <div class="row">
        <div class="col-md-6 m-auto">
          {% block content %}{% endblock %}
        </div>
      </div>
    </div>
  </body>
</html>

index. html

{% extends 'base.html' %} 
{% block content %} 
    <h1 class="text-center mb-3">Poll Questions</h1>
    {% if latest_question_list %}
        {% for question in latest_question_list %}
            <div class="card mb-3">
                <div class="card-body">
                    <p class="lead">{{ question.question_text}}</p>
                    <a href="{% url 'polls:detail' question.id %}" class="btb btn-primary btn-sm">Vote Now</a>
                    <a href="{% url 'polls:results' question.id %}" class="btb btn-secondary btn-sm">Results</a>
                </div>
            </div>
        {% endfor %}
    {% else %}
        <p>No polls available</p>
    {% endif %}

{% endblock %}


mysite.urls

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

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

polls.urls

from django.urls import path

from . import views  #from ALL import views

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'),
]

polls.views

from django.shortcuts import render
from django.http import HttpResponse, HttpResponseRedirect
from django.shortcuts import get_object_or_404, render
from django.urls import reverse

from .models import Question, Choice

# Get questions and display them

def index(request):
    latest_question_list = Question.objects.order_by('-pub_date')[:5]
    context = {'latest_question_list': latest_question_list}
    return render(request, 'polls/index.html', context)


# Show specific question and choices 
def detail(request, question_id):
    try:
        question = Question.objects.get(pk=question_id)
    except Question.DoesNotExist:
        raise Http404("Question does not exist")
    return render(request, 'polls/detail.html', {'question': question})

# Get question and display results

def results(request, question_id):
    question = get_object_or_404(Question, pk=question_id)
    return render(request, 'polls/results.html', {'question': question})

# Vote for a question choice
def vote(request, question_id):
    # print (request.POST['choice'])
    question = get_object_or_404(Question, pk=question_id)
    try:
        selected_choice = question.choice_set.get(pk=request.POST['choice'])
    except (KeyError, Choice.DoesNotExist):
        # Redisplay the question voting form.
        return render(request, 'polls/detail.html', {
            'question': question,
            'error_message': "You didn't select a choice.",
        })
    else:
        selected_choice.votes += 1
        selected_choice.save()
        # Always return an HttpResponseRedirect after successfully dealing
        # with POST data. This prevents data from being posted twice if a
        # user hits the Back button.
        return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))

подробно. html

{% extends 'base.html' %}
{% block content %}

<a href="{% url 'polls:index' %}" class="btb btb-secondary btn-sm mb-3">Back To Polls</a>
<h1 class="text-center mb-3">{{ question.question_text }}</h1>

{% if error_message %}
<p class="alert alert-danger">   
    <strong>{{ error_message }}</strong>
</p>

{% endif %}

<form action="{% url 'polls:vote' question.id %}" method ="post">
    {% csrf_token %} 
    {% for choice in question.choice_set.all %}
    <div class="form-check">
        <input type="radio" name="choice" class="form-check-input" id="choice{{ forloop.counter }}" value = "{{ choice.id }}"/>
        <label for="choice{{ forloop.counter }}">
            {{ choice.choice_text }}
        </label>
    </div>
    {% endfor %}
    <input type="submit" value ="Vote" class ="btn btn-success btn-lg btn-block mt-4" />
</form>

{% endblock %}


Я новичок в Django и хотел бы узнать, как найти откуда могут быть ошибки. Я проверил код, связанный с этим завершенным проектом с канала, который смотрю, но не смог найти ошибку, которую я сделал.

Где могла быть ошибка в моем коде?

Я исследовал, и этот вопрос о переполнении стека может быть таким же, как мой, но также не был решен.

Вот моя структура папок

Я также новичок в python для веб-разработки, поэтому любые советы о том, как я могу это изучить, были бы полезны. Заранее благодарю!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...