HttpResponseRedirect更改视图但不呈现模板

时间:2013-11-17 08:06:41

标签: python django http-redirect

我是Django的新手和一般的网络编程,请不要让答案太复杂。我已经在这里查阅了文档和问题,但我无法理解它。

我有一个表单,在验证并将模型保存到数据库后,我想将用户重定向到新页面。我的问题是,我如何正确地使用HttpResponseRedirect(甚至是快捷方式重定向),因为它正确地重定向视图,url模式被调用但是当它到达views.py中的视图时会出现数组。为什么模板不会改变但是视图会改变?

有人可以告诉我哪里错了,以及如何解决?

views.py

class CreateSuccess(generic.ListView):
    template_name = 'login/successReg.html'

def CreateUser(request):
    if request.method == "POST":
        form = CreateUserForm(request.POST)
        if form.is_valid():
            newUser = form.save()

            return HttpResponseRedirect('sucess/')
    else:
        form = CreateUserForm()

    return render(request, 'login/addUser.html', {'form':form})

urls.py

    urlpatterns = patterns('',
    url(r'^$', views.LoginIndex.as_view(), name='loginIndex'),
    url(r'^create/', views.CreateUser, name='addUser'),
    url(r'^authenticate/', views.LoginUser.as_view(), name='loginUser'),
    url(r'^create/success/', views.CreateSuccess.as_view(), name='successReg'),
)

1 个答案:

答案 0 :(得分:2)

尝试返回构建所需网址的reverse()对象

if form.is_valid():
    newUser = form.save()
    url = reverse('your_app:successReg') # Replace your_app with the name of your app
    return HttpResponseRedirect(url)

有关reverse()的更多信息:

reverse(viewname)

  • viewname是函数名称​​(函数引用,或 名称的字符串版本) ,这意味着您可以在views.py中将viewname设为现有函数,或者通过urls.py

始终建议以reverse('app_name : name_defined_in_urls')

的形式执行此操作

注意:由于您是初学者,我删除了如果您想将用户重定向到动态网页时使用的可选args and kwargs参数