Django 1.6基本url(站点框架的替代方案)?
从Django发送电子邮件时,习惯上(至少对我来说)使用Site对象来获取基本url。 i、 eDjango 1.6基本url(站点框架的替代方案)?,django,Django,从Django发送电子邮件时,习惯上(至少对我来说)使用Site对象来获取基本url。 i、 e'http://{}{}.format(Site.objects.get_current(),reverse('my_view')) 然而,在Django 1.6中,站点框架在默认情况下没有启用,这让我想到,现在可能有一种不同的方法来实现这一点 当然,您可以在settings.py文件中添加一个基本url,但是有没有Django特定的方法来获取基本url 如果是在模板或视图中,您可以使用HttpReq
'http://{}{}.format(Site.objects.get_current(),reverse('my_view'))
然而,在Django 1.6中,站点框架在默认情况下没有启用,这让我想到,现在可能有一种不同的方法来实现这一点
当然,您可以在settings.py文件中添加一个基本url,但是有没有Django特定的方法来获取基本url
如果是在模板或视图中,您可以使用HttpRequest.build\u absolute\u uri(location)
,但是如果您使用芹菜任务发送电子邮件,那么这就不是那么简单了(因为您没有HttpRequest对象的实例)
因此,问题是:
对于构建用于电子邮件(或其他没有请求对象的区域)的绝对URL,获取主机的最简单方式是什么?可能感觉不太像(包括我在内的许多人都使用您描述的站点框架),但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的”,但它应该会起作用