2009-05-21 18 views
20

Estoy usando plantillas django para crear un correo electrónico. Hago algo como esto:¿Cómo obtengo el nombre del servidor en Django para obtener una URL completa?

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() 

Mi plantilla usos mencionados patrones de URL de este modo: {% parámetro URL_NAME url%}

que funciona muy bien, excepto que tomará una dirección URL relativa, como: /nombre_apl/url_node/parámetro

lo general, eso es suficiente, pero ya que este es un correo electrónico que realmente necesita que sea una URL completa - con el nombre de servidor antepuesto, como: http://localhost:8000/app_name/url_node/parameter.

¿Cómo puedo hacer esto? ¿Cómo obtengo dinámicamente el nombre del servidor? (No quiero codificarlo con seguridad).

Otra forma de preguntar: ¿cómo obtengo HttpServletRequest.getContextPath() ala Java, pero en cambio en Django/Python?

gracias

Respuesta

16

Uso sitios de aplicación:

Site.objects.get_current().domain 

Ejemplo directamente de la documentación:

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

¿Y SIN utilizar sitios? ¿Hay alguna forma de hacer esto? Es bastante tonto tener que confiar en un modelo. – JamesD

+2

Siempre puedes configurarlo en tu archivo de configuración y anularlo con tu archivo local_settings – super9

+4

Ver http://stackoverflow.com/questions/2345708/how-can-i-get-the-full-absolute-url-with -dominio-en-django – glarrain

Cuestiones relacionadas