我正在尝试部署一个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。 这里的设计/配置缺陷在哪里?
答案 0 :(得分:4)
“我遇到的问题是我正在使用硬编码的HttpResponseRedirect”
那么,不要那样做。这就是Django提供reverse
函数的原因,该函数获取您的网址名称并计算正确的绝对网址。