NoReverseMatch Django:找不到模式

时间:2019-02-12 03:50:14

标签: django django-forms django-templates django-views

我正在用Django构建我的第一个应用程序(猜测应用程序),到目前为止我做得很好。但是当用户通过Submit函数(类似于“ post blog”场景)提交文件时,尝试重定向到详细信息视图时遇到错误。

我查了几个有相同问题的帖子,但无法弄清楚为什么我的代码无法正常工作。

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 :(得分:1)

在您的代码中,您有两个问题。首先,表单不是Model实例。调用form.save()时,它将返回模型实例。因此,您需要将其存储在变量中。第二个问题是,您需要将kwargs作为已知参数传递给reverse,而不是HttpResponseRedirect。因此,以下代码应该起作用:

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