2009-05-21 44 views
20

我正在使用django模板來創建電子郵件。我做這樣的事情:如何獲取Django中的服務器名稱以獲得完整的url?

msg_html = render_to_string('email/%s.html' % template_name, context) 
msg = EmailMultiAlternatives(subject, msg_text, from_email, to_list) 
msg.attach_alternative(msg_html, "text/html") 
msg.content_subtype = "html" 
msg.send() 

我的模板使用名爲URL模式,像這樣: {%URL URL_NAME參數%}

,工作正常,但它將呈現一個相對URL,如: /app_name/url_node /參數

通常這已經足夠了,但是由於這是一封電子郵件,我真的需要它是一個完整的網址 - 前面帶有服務器名稱,如: http://localhost:8000/app_name/url_node/parameter

我該怎麼做?我如何動態獲取服務器名稱? (我不想確定硬編碼)。

問另一種方式:我如何獲得HttpServletRequest.getContextPath()ala Java,而是在Django/Python中?

感謝

回答

16

使用站點應用:

Site.objects.get_current().domain 

來自實例文檔的直接:

from django.contrib.sites.models import Site 
from django.core.mail import send_mail 

def register_for_newsletter(request): 
    # Check form values, etc., and subscribe the user. 
    # ... 

    current_site = Site.objects.get_current() 
    send_mail('Thanks for subscribing to %s alerts' % current_site.name, 
     'Thanks for your subscription. We appreciate it.\n\n-The %s team.' % current_site.name, 
     '[email protected]%s' % current_site.domain, 
     [user.email]) 

    # ... 
+6

如何使用無網站?有沒有辦法做到這一點?必須依賴模型是非常愚蠢的。 – JamesD 2012-02-12 04:02:48

相關問題