почему reverse () добавляет путь к серверу? - PullRequest
4 голосов
/ 22 марта 2012

У меня есть несколько экземпляров моего проекта на моем сервере, например:

http://0.0.0.0/one

http://0.0.0.0/two

У меня также есть вид активации, который доступен через:

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

Когда я делаю reverse () в этом представлении из оболочки django, мне присваивается URL:

/activate/u/1/c/123

Таким образом, он не включает /one путь к серверу. Однако, когда я использую reverse () для поиска пути к странице для отправки электронного письма куда-то еще в проекте, reverse (), кажется, возвращает полный путь к серверу + путь просмотра, например:

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

Кто-нибудь знает, почему это происходит?

1 Ответ

5 голосов
/ 22 марта 2012

reverse() должен включать этот путь к серверу, так что вы можете просто использовать его в ссылке, и он будет работать без необходимости что-либо менять в вашем коде. Но manage.py shell не устанавливает соответствующий префикс пути; этот код происходит в обработчике wsgi / etc. Это ошибка Django # 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/')
...