我的服务器上运行了多个项目实例,如下所示:
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
有没有人知道为什么会这样?
答案 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/')