我有一個像下面這樣的模型。當創建一個實例,我想電子郵件發送給利害關係人: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