在django表单提交后,使用新创建的pk重定向到页面

时间:2012-01-03 15:56:51

标签: django django-views

我正在尝试重定向用户以在任务提交后编辑任务的详细信息,但是根据新创建的pk重定向到页面时遇到了麻烦。每个视图都可以在没有返回HttpResponseRedirect行的情况下工作。我还为变量尝试了arge =(instance.id)和kwargs =(instance.id)。

views.py

...
from django.http import HttpResponseRedirect, HttpResponseServerError, HttpResponseForbidden, Http404, HttpResponse
from django.core.urlresolvers import reverse
from django.shortcuts import render_to_response, get_object_or_404,render
...

def new_task(request):
    ...
    ...
    task.save()
    instance = task.save()
    return HttpResponseRedirect(reverse('task_values', instance.id))

def task_values(request, task_id):
   ...  

urls.py

from django.conf.urls.defaults import patterns, include, url
from django.http import HttpResponseRedirect
from django.views.generic.simple import direct_to_template

urlpatterns += patterns('core.views_entry',               
                   #Task viewing/editing
                   (r'^task/(?P<task_id>\d+)/$','task_values'),
                   (r'^enter/$','new_task'),

1 个答案:

答案 0 :(得分:1)

return HttpResponseRedirect(reverse('task_values', kwargs={'task_id': instance.id}))

另请注意,您无需将任务保存两次。

编辑好的,还有另一个问题。您没有为您的URL指定特定名称,这意味着识别它们的唯一方法是传递完全限定的视图名称:

reverse('core.views_entry.task_values', kwargs=...)

或者,更好的是,使用url()功能命名您的网址:

url(r'^task/(?P<task_id>\d+)/$','task_values', name='task_values'),

你可以使用我上面给出的原始版本。

请注意,该错误并未告诉您它将转到enter/<id>/,只是在该视图中它正在尝试为重定向创建反向URL并失败。