2013-03-20 55 views
2

我在我的django項目中寫了一個信號,裏面我想發送一封電子郵件和我的網站的完整路徑。但是爲了做到這一點,我需要在信號中獲取請求對象,我怎麼能這樣做呢?謝謝。Django信號獲取請求完整路徑

@receiver(pre_save, sender=AccessRequest) 
    def email_if_access_true(sender, instance, **kwargs): 
     #How can I get the full path of my website here? 
     pass 

回答

2

認沽下面的代碼在你的pre_save信號接收器定義SITE_ID=1

from django.contrib.sites.models import get_current_site 
current_site = get_current_site(request=None) 
domain = current_site.domain 
protocol = "http" 

你可以通過產生絕對URL到您的網站的電子郵件所需的上下文變量模板。如果access_request是您的案例,並且您的AccessRequest模型中有一個get_abosulte_url()方法,則電子郵件模板中的以下行將爲您提供絕對網址。

{{ protocol }}://{{ domain }}{% access_request.get_absolute_url %} 

參考 - PasswordResetFormdjango.contrib.auth.form

2

如果您無權訪問請求對象,則可以使用Site模型管理器的get_current()方法。

from django.contrib.sites.models import Site 

@receiver(pre_save, sender=AccessRequest) 
def email_if_access_true(sender, instance, **kwargs): 
    current_site = Site.objects.get_current() 
    if current_site.domain == 'foo.com': 
     #do other stuff here 
    else: 
     pass 

你需要確保你在你的設置

+0

wrt/SITE_ID = 1:也就是說,除非您真的使用網站框架來爲同一個項目中的多個網站提供服務;) – 2013-03-20 10:37:20