【问题标题】:django redirect after form submission not working表单提交后django重定向不起作用
【发布时间】: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 时必须引用该命名空间。如果你想让它回答,我会接受它。

标签: django forms redirect


【解决方案1】:

答案很简单,正如我所怀疑的那样。对于其他人,如果您为一组 url 模式使用命名空间,则在调用这些 url 时必须引用该命名空间。对于这个例子:

return redirect('app:success')

【讨论】:

    【解决方案2】:
    def upload(request):
        if request.method == 'POST':
            form = InvestmentReportForm(request.POST, request.FILES)
    
            if form.is_valid():
                form.save()
    
                return HttpResponseRedirect('success/')
        else:
            form = InvestmentReportForm()
        return render(request, 'app/upload.html', {'form': form})
    

    【讨论】:

    • 谢谢,但我试过了。我收到了 404 错误和这条消息:The current path, inveskore/upload/success/, didn't match any of these. 出于某种原因,它将 URL 标题链接在一起。我是否必须设置一个作为表单页面子路径的 URL 路径???
    • 使用url成功/
    • 我不确定你的意思...如何使用它?我已经按照您的说明完成并获得了 404。
    • 然后使用 /inveskore/success/
    猜你喜欢
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-15
    • 2018-03-25
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多