1

从 Django 发送电子邮件时,习惯(至少对我来说)使用 Site 对象来获取基本 url。IE'http://{}{}'.format(Site.objects.get_current(), reverse('my_view'))

然而,在 Django 1.6 中,站点框架默认没有启用,这让我想到现在可能有不同的方法。

当然,您可以在 settings.py 文件中添加基本 url,但是有没有 Django 特定的方法来获取基本 url?

如果它在模板或视图中,您可以使用HttpRequest.build_absolute_uri(location),但是如果您使用 Celery 任务发送电子邮件,那么这不是那么简单(因为您没有 HttpRequest 对象的实例。

所以问题是:获取主机的最 Djangonic 方式是什么,用于构建要在电子邮件(或其他没有请求对象的区域)中使用的绝对 URL?

4

1 回答 1

0

可能感觉不像(包括我自己在内的很多人都使用您所描述的站点框架),但 Django 站点框架的目的并非如此。从文档中:

如果您的单个 Django 安装支持多个站点并且您需要以某种方式区分这些站点,请使用它。

我相信这就是它现在默认禁用的原因。

至于在电子邮件中获取主机,我要做的是将其存储在设置中:

# settings.py
SITE_HOST_NAME = 'example.com'

# email code
from django.conf import settings
SITE_HOST_NAME = getattr(settings, 'SITE_HOST_NAME', 'defaulthostname')

另外,这种方法不会影响数据库。我不确定它是否是“最 Djangonic”,但它应该可以工作。

于 2013-11-12T13:03:21.667 回答