NoReverseMatch Django:找不到模式



我正在用Django构建我的第一个应用程序(猜测应用程序),到目前为止我做得很好。但是,当用户通过提交函数提交文件时,我在尝试重定向到详细信息视图时遇到了一个错误(类似于"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]+)$'] 

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

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

最新更新