1

我有一个我正在尝试部署的 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
...

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

sitename.com/expofit/param_select/

Apache 无法识别。

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

return HttpResponseRedirect('expofit/param_select/')

这将导致:

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

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

4

1 回答 1

4

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

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

于 2013-03-11T16:52:10.293 回答