【发布时间】:2018-06-11 15:04:25
【问题描述】:
django 新手
所以这个可能有一个非常简单的答案,但我终生无法找到具体的解决方案。我只是在使用 FileField 提交表单后尝试重定向到新 URL。
我可以单独导航到 URL,它工作正常。
文件正确上传,因此我知道它已正确验证。
但是重定向返回以下错误:
Reverse for 'success' not found. 'success' is not a valid view function or pattern name.
我尝试了很多不同的命名约定,但都没有奏效。在我看来,我已经设置了 URL 并正确传递了它。
非常感谢您对此的帮助。最简单的问题最令人沮丧!
这里是视图。
from django.shortcuts import render, redirect
from django.http import HttpResponse, HttpResponseRedirect
from django.urls import reverse
from .forms import InvestmentReportForm
def upload(request):
if request.method == 'POST':
form = InvestmentReportForm(request.POST, request.FILES)
if form.is_valid():
form.save()
return redirect('success')
else:
form = InvestmentReportForm()
return render(request, 'app/upload.html', {'form': form})
def success(request):
return HttpResponse("File successfully uploaded")
还有我的 urls.py:
app_name = 'app'
urlpatterns = [
path('', views.index, name='index'),
path('upload/', views.upload, name='upload'),
path('success/', views.success, name='success'),
path('performance/', views.performance, name='performance'),
]
【问题讨论】:
-
好的,如果你在return redirect('success')之前添加success_url = reverse('success'),你会看到什么?您需要断言 False 才能看到 success_url 的值
-
这些 url 模式有命名空间吗?
-
你的意思是我在我的 urls.py 中提供了一个 app_name 吗?如果是这样,是的。生病更新代码。
-
alrite 所以我尝试了这个
return redirect('app:success'),它成功了。因此,如果您对一组 URL 模式进行命名空间,则在尝试调用 url 时必须引用该命名空间。如果你想让它回答,我会接受它。