NoReverseMatch Django: не могу найти шаблон - PullRequest
0 голосов
/ 12 февраля 2019

Я создаю свое первое приложение (угадай приложение) с Django, пока у меня все хорошо.Но я столкнулся с ошибкой при попытке перенаправить в подробный вид, когда пользователь отправляет файл с помощью функции отправки (аналогично сценарию «публикация в блоге»).

Я просмотрел несколько сообщений с той же проблемой и не могу понять, почему мой код не работает.

views.py

@login_required
def submit(request):
if request.method == 'POST':
    submited_form = SubmitFileForm(request.POST, request.FILES) 
    if submited_form.is_valid():
        ...
        form.save()
        return HttpResponseRedirect(reverse('result-detail'), kwargs={'pk': form.pk})
else:
    submited_form = SubmitFileForm()

return render(request, 'guess/submit.html', context)

class ResultDetailView(LoginRequiredMixin, DetailView):
      model = Result
      template_name = 'guess/result_detail.html'
      context_object_name = 'result'

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

urls.py

url_patterns = [
...
path('result/<int:pk>', guess_views.ResultDetailView.as_view(), name='result-detail'),
...
]

result_detail.html

{% extends "guess/base.html" %}
{% block content %}
<article class="media content-section">
  <div class="media-body">
    <div class="article-metadata">
      <a class="mr-2" href="#">{{ result.author }}</a>
      <small class="text-muted">{{ result.date_posted }}</small>
    </div>
    <h2 class="article-title">{{ result.title }}</h2>
    <p class="article-content">{{ result.statistic }}</p>
  </div>
</article>
{% endblock content %}

Я бы ожидал перенаправления на деталипредставление объекта, созданного с помощью функции submit и submitfileform (форма модели).Я могу получить доступ к деталям, если я просто наберу / result / и первичный ключ любого созданного объекта.Но, видимо, я не могу сделать то же самое с помощью перенаправления.

Я получаю ошибку:

NoReverseMatch at /submit/
Reverse for 'result-detail' with no arguments not found. 1 pattern(s) tried: ['result/(?P<pk>[0-9]+)$'] 

1 Ответ

0 голосов
/ 12 февраля 2019

В вашем коде две проблемы.Во-первых, форма не является экземпляром модели.Когда вы вызываете form.save(), он вернет экземпляр модели.Так что вам нужно хранить его в переменной.Вторая проблема заключается в том, что вам нужно передать kwargs в качестве известного аргумента в reverse , а не в HttpResponseRedirect.Таким образом, следующий код должен работать:

instance = form.save()
return HttpResponseRedirect(reverse('result-detail',kwargs={'pk': instance.pk}))
...