使用Django形式重定向HttpResponseRedirect(Django form redi

2019-08-19 02:59发布

因此,这不能太硬,但我不出来...

我想我在Django(位于/ file_upload /)上载文件,将其添加到数据库中,然后重定向到一个新的页面,其中的参数是我在数据库中已经添加了该领域的ID(位于表格在/文件/ 163 /,说的)。

我已经成立了urls.py使/文件/ 163 /如果你直接导向那里工作得很好,但我不知道如何从/文件/上传/那里。

我的代码是这样的:

def add(request):
    if request.method == 'POST': # If the form has been submitted...
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            # do stuff & add to database
  my_file = FileField.objects.create()
            return HttpResponseRedirect(reverse('/file/', args=[my_file.id]))

我不能使用这个解决方案 ,因为我不知道是什么ID字段将是,直到我已经处理在views.py的形式,让重定向在views.py发生根本。 我认为。

有什么想法吗?

Answer 1:

您与表单视图应该是这个样子:

def add(request):
    if request.method == 'POST':
        form = UploadFileForm(request.POST, request.FILES)
        if form.is_valid():
            # do stuff & add to database
            my_file = FileField.objects.create()
             # use my_file.pk or whatever attribute of FileField your id is based on
            return HttpResponseRedirect('/files/%i/' % my_file.pk)
    else:
        form = UploadFileForm()

    return render_to_response('upload_file.html', {
        'form': form,
    })


Answer 2:

你得的参数来reverse错误的

return HttpResponseRedirect(reverse('/file/', args=[my_file.id]))

reverse取视图或名称或一个视图,而不是URL。

你不说你的观点函数被调用查看该文件,但可以说,它被称为view ,那么上述应

return HttpResponseRedirect(reverse('view', args=[my_file.id]))

或者可能

return HttpResponseRedirect(reverse(view, args=[my_file.id]))

这依赖于你在urls.py写道:

你能说出的意见urls.py并使用这些名称,而不是功能的业者名称, 看到更多的例子文档

使用反过来,如果你喜欢你的洗牌是个好主意urls.py左右-你就可以改变任何的路径和所有的意见都将只是继续工作。



Answer 3:

或者你可以简单地使用redirect(to[, permanent=False], *args, **kwargs)快捷功能:

  1. 通过使模型对象(如果模型的get_absolute_url方法被定义),所以在您的情况:

     my_file = FileField.objects.create() return redirect(my_file) 
  2. 通过传递视图名称和一些位置和关键字参数,你的情况:

     my_file = FileField.objects.create() return redirect('file', my_file.pk) 

    或使用位置参数,如果您的网址定义需要它:

     my_file = FileField.objects.create() return redirect('file', file_id=my_file.pk) 
  3. 通过传递一个相对的,绝对的,或完整的URL:
     my_file = FileField.objects.create() return redirect('/files/%i/' % my_file.pk) 


Answer 4:

在我看来,你想达到什么是什么Django的教程说明,一步一步来。 如果你有一段时间了,检查出来: Django的教程 https://docs.djangoproject.com/en/1.6/intro/tutorial03/



文章来源: Django form redirect using HttpResponseRedirect