处理HttpResponseRedirect的正确方法

时间:2013-03-11 16:41:24

标签: django django-forms django-views

我正在尝试部署一个Django应用程序。 Apache设置的配置方式是我通过以下URL访问我的wsgi应用程序:

sitename.com/~amartino

意思是我的public_html目录中只有一个wsgi.py文件。 我通过URL访问我的Django站点:

sitename.com/~amartino/expofit

这就是它在urls.py中设置的方式。

urlpatterns = patterns('',
('/param_select/$',session_check(param_select)),
('registration/$',registration),
('result_show/(\d+)',session_check(result_show)),
('^expofit/$',media_clean(start)),
('result_pick/$',session_check(result_pick)),
('mail_report/$',session_check(mail_report)),
('notification/$',session_check(notification)),

然而,我得到的问题(在开发中没有显示:))是我在views.py中使用硬编码的HttpResponseRedirect。

...
#If all fields are valid
return HttpResponseRedirect('/expofit/param_select/')
#else reload page
...

由于生产环境没有将我的网站放在网址的根目录中,因此我现在遇到错误,因为上方HttpResponseRedirect会转换为

sitename.com/expofit/param_select/

,但Apache无法识别。

我想我可以删除斜杠并拥有:

return HttpResponseRedirect('expofit/param_select/')

会导致:

sitename.com/~amartino/expofit/registration/expofit/param_select/

但这似乎不是正确的方法,因为我最终会得到一个巨大的URL。 这里的设计/配置缺陷在哪里?

1 个答案:

答案 0 :(得分:4)

  

“我遇到的问题是我正在使用硬编码的HttpResponseRedirect”

那么,不要那样做。这就是Django提供reverse函数的原因,该函数获取您的网址名称并计算正确的绝对网址。