1

我需要让 django 发送一封电子邮件,其中包含这样的 URL

http://www.mysite.org/history/

像这样获得“历史”的地方:

history_url = urlresolvers.reverse('satchmo_order_history')

history_url 是我传递给发送电子邮件的函数的参数,它正确地生成“/history/”。但是我如何获得第一部分?(http://www.mysite.org)

编辑 1

这样做有什么不对或不可移植的吗?

history = urlresolvers.reverse('satchmo_order_history')
domain = Site.objects.get_current().domain
history_url = 'http://' + domain + history
4

1 回答 1

6

如果您有权访问HttpRequest实例,则可以使用HttpRequest.build_absolute_uri(location)

absolute_uri = request.build_absolute_uri(relative_uri)

或者,您可以使用站点框架获取它:

import urlparse
from django.contrib.sites.models import Site

domain = Site.objects.get_current().domain
absolute_uri = urlparse.urljoin('http://{}'.format(domain), relative_uri)

回复:编辑1

我倾向于使用urlparse.join,因为它在标准库中,并且从技术上讲,它是组合 URI 的最 Pythonic 方式,但我认为您的方法也很好。

于 2012-11-22T19:56:00.023 回答