Я следую руководству django 2.0 «2.6.2 Использование общих представлений: меньше кода - лучше» и пытаюсь преобразовать представления функций в представления классов.
Выдает такую ошибку:
TemplateDoesNotExist at /polls/1/results/
polls/question_detail.html
Request Method: GET
Request URL: http://127.0.0.1:8000/polls/1/results/
Django Version: 2.0.4
Код сверил по официальным материалам
class ResultsView(generic.DetailView):
model = Question
template = '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):
#Redisplay the question voting form
return render(request, 'polls/detail.html', {
'question':question,
'error_message':"You did'nt select a choice.",
})
else:
selected_choice.votes += 1
selected_choice.save()
return HttpResponseRedirect(reverse('polls:results', args=(question.id,)))
Ошибка возникает, когда я пытаюсь отправить голосование:
Шаблон polls/detail.html работает правильно, когда поставляется с представлениями функций:
<h1>{{ question.question_text }}</h1>
{% if error_message %}
<p>
<strong>{{ error_message }}</strong>
</p>
{% endif %}
<form action = "{% url 'polls:vote' question.id %}" method = "post">
{% csrf_token %}
{% for choice in question.choice_set.all %}
<input type = "radio" name = "choice" id = "choice {{ forloop.counter }}" value = "{{ choice.id }}"/>
<label for = "choice{{ forloop.counter }}">{{ choice.choice_text }}</label> <br>
{% endfor %}
<input type = "submit" value = "Vote"/>
</form>
В чем проблема с моим кодом?
Также ничто в вашем коде не включает polls/question_detail.html, поэтому, очевидно, это другой вид / URL-адрес
@ResleyRodrigues, нет, ResultsView, показанный в вопросе, по умолчанию будет polls/question_detail.html.






По умолчанию DetailView для модели Question в приложении polls использует шаблон polls/question_detail.html.
Вам нужно использовать template_name, если вы хотите отменить это. Вы установили template, но это ни на что не повлияет. Так должно быть:
class ResultsView(generic.DetailView):
model = Question
template_name = 'polls/results.html'
...
Выложите пожалуйста
urls.pyиз приложения опросы. Ошибка очевидна: представление ищет шаблонpolls/question_detail.html, которого не существует. Вот почему нам нужно увидетьurls.py, чтобы проверить, какое представление вызывается при запросе URL-адреса/polls/1/results/.