2009-05-21 4 views
20

Ich verwende django Vorlagen eine E-Mail zu erstellen. Ich mache so etwas wie diese:Wie erhalte ich die Servernamen in Django für eine vollständige 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() 

Meine Vorlage URL-Muster wie so genannt, verwendet: {% url url_name Parameter%}

die gut arbeitet, außer es eine relative URL übertragen wird, wie: /app_name/url_node/Parameter

Normalerweise ist das genug, aber da dies eine E-Mail ist, brauche ich es wirklich eine vollständige URL - mit dem Server-Namen vorangestellt, wie: http://localhost:8000/app_name/url_node/parameter.

Wie kann ich das tun? Wie bekomme ich den Servernamen dynamisch? (Ich will es nicht fest codieren).

Ein anderer Weg zu fragen: wie bekomme ich HttpServletRequest.getContextPath() ala Java, sondern in Django/Python?

dank

Antwort

16

Verwendung Einsatzorte:

Site.objects.get_current().domain 

Beispiel aus Dokumentation richten:

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

Wie wäre es OHNE Seiten zu verwenden? Gibt es eine Möglichkeit, dies zu tun? Es ist ziemlich albern, sich auf ein Modell verlassen zu müssen. – JamesD

+2

Sie können immer es in der Einstellungsdatei gesetzt und over-ride es mit Ihren local_settings Datei – super9

+4

http://stackoverflow.com/questions/2345708/how-can-i-get-the-full-absolute-url-with anzeigen -domain-in-django – glarrain

Verwandte Themen