Django的形式重定向使用HttpResponseRedirect
所以这也不能太硬,但我不出来...Django的形式重定向使用HttpResponseRedirect
我希望我在Django(位于/file_upload/)的形式上传的文件,将它添加到数据库中,然后重定向到一个新页面,其中参数是我在数据库中添加的字段的ID(位于/file/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]))
我不能使用this solution因为我不知道什么ID字段将是,直到我已经处理在views.py形式做的,所以重定向必须发生在views.py中。我认为。
有什么想法?
您与表单视图应该是这个样子:
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,
})
你已经得到了参数reverse
错
return HttpResponseRedirect(reverse('/file/', args=[my_file.id]))
reverse
需要一个视图或名或视图,不是网址。
你不说你的观点函数被调用查看该文件,但可以说,它被称为view
,那么上述应
return HttpResponseRedirect(reverse('view', args=[my_file.id]))
也许
return HttpResponseRedirect(reverse(view, args=[my_file.id]))
根据正是你写在urls.py
你可以命名urls.py
的意见,并使用这些名称,而不是功能名称see the documentation for more examples
如果你喜欢洗牌你的urls.py
左右,使用反向是一个好主意 - 你可以改变任何路径,所有的观点将继续工作。
+1,反向使生活更轻松。 – 2010-03-15 00:55:12
或者你可以使用简单的redirect(to[, permanent=False], *args, **kwargs)
快捷功能:通过传递一个模型对象(如果模型的get_absolute_url方法被定义)
-
,所以你的情况:
my_file = FileField.objects.create() return redirect(my_file)
-
通过在你的情况下传递一个视图名称和一些位置和关键字参数:
my_file = FileField.objects.create() return redirect('file', my_file.pk)
或使用位置参数,如果您的网址定义需要它:
my_file = FileField.objects.create() return redirect('file', file_id=my_file.pk)
- 通过传递一个相对的,绝对的,或完整的URL:
my_file = FileField.objects.create() return redirect('/files/%i/' % my_file.pk)
在我看来,你想达到的究竟是什么Django教程一步一步解释了什么。如果您有一些时间,请查看:Django Tutorialhttps://docs.djangoproject.com/en/1.6/intro/tutorial03/
完美。谢谢 – AP257 2009-10-16 16:26:59
@Richard - 请注意Nick Craig-Wood的评论 - 对于您的观点,您最好使用“reverse”而非硬编码网址。 – 2009-10-16 17:15:00