我有一个像下面这样的模型。当创建一个实例,我想电子邮件发送给利害关系人:Django:获取无需访问请求对象的绝对URL
class TrainStop(models.Model):
name = models.CharField(max_length=32)
notify_email = models.EmailField(null=True, blank=True)
def new_stop_created(sender, instance, created, *args, **kwargs):
# Only for new stops
if not created or instance.id is None: return
# Send the status link
if instance.notify_email:
send_mail(
subject='Stop submitted: %s' % instance.name,
message='Check status: %s' % reverse('stop_status', kwargs={'status_id':str(instance.id),}),
from_email='[email protected]',
recipient_list=[instance.notify_email,]
)
signals.post_save.connect(new_stop_created, sender=TrainStop)
然而,reverse
调用仅返回URL的路径部分。例如:/stops/9/status/
。我需要一个完整的URL,如http://example.com/stops/9/status/
。我将如何去检索当前网站的主机名和端口(对于不使用端口80的测试实例)?
我最初的想法是通过settings.py
中的变量使其可用,然后根据需要进行访问。不过,以为有人可能会有更强有力的建议。
“如果他们不打算设置它,我的应用程序不会为他们工作而烦心”,但这没有帮助“?您如何称呼”要求“是”没有帮助“?这是一个简单的要求为什么要这个应用程序是“神奇的”,而不需要设置?如果你不能依靠用户,然后,他们会做一些其他的事情来颠覆应用程序,不是吗?就像修改代码一样。只需说明所需的设置并完成它。不要华夫饼干。 – 2010-11-11 02:56:29
这是事实,但我的意思更多,它对我们目前对可靠域检测方法的讨论没有帮助。不过,你说得对,我说我们“不能依赖用户”就是这样。 – eternicode 2010-11-11 03:15:32
如果没有请求,则无法检测到域,并且“reverse”或“{%url%}”。其他任何**需要**设置。这很简单。没有理由为此而华而不实。要求设置并完成。 – 2010-11-11 11:03:45