为什么reverse()会在服务器路径前加上?

时间:2012-03-22 00:42:39

标签: django django-views

我的服务器上运行了多个项目实例,如下所示:

http://0.0.0.0/one

http://0.0.0.0/two

我还有一个可通过以下方式访问的激活视图:

http://0.0.0.0/one/activate/u/1/c/123

当我从django shell对此视图执行reverse()时,给我的URL为:

/activate/u/1/c/123

因此它不包含/one服务器路径。但是,当我使用reverse()查找要在项目中的其他位置发送的电子邮件的页面路径时,reverse()似乎返回完整的服务器路径+视图路径,如下所示:

/one/activate/u/1/c/123

有没有人知道为什么会这样?

1 个答案:

答案 0 :(得分:5)

reverse()应该包含此服务器路径,这样您就可以在链接中使用它,并且无需更改代码中的任何其他内容即可。但是manage.py shell没有设置适当的路径前缀;该代码发生在wsgi / etc处理程序中。这是Django bug #16734(我偶然报道了:p)。

您可以通过手动调用django.core.management.base.set_script_prefix来解决此问题,大概是在settings.py。例如:

# when running through wsgi, this will get overriden
# but it's needed for manage.py
from django.core.urlresolvers import set_script_prefix
set_script_prefix('/one/')