因此,这不能太硬,但我不出来...
我想我在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发生根本。 我认为。
有什么想法吗?
您与表单视图应该是这个样子:
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
取视图或名称或一个视图,而不是URL。
你不说你的观点函数被调用查看该文件,但可以说,它被称为view
,那么上述应
return HttpResponseRedirect(reverse('view', args=[my_file.id]))
或者可能
return HttpResponseRedirect(reverse(view, args=[my_file.id]))
这依赖于你在urls.py写道:
你能说出的意见urls.py
并使用这些名称,而不是功能的业者名称, 看到更多的例子文档
使用反过来,如果你喜欢你的洗牌是个好主意urls.py
左右-你就可以改变任何的路径和所有的意见都将只是继续工作。
或者你可以简单地使用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的教程 https://docs.djangoproject.com/en/1.6/intro/tutorial03/